在这个 django 项目中,有很多模型,我们想使用 queryset.as_manager 为每个模型添加一个自定义查询集和一个管理器,而不必在每个模型中手动指定它。
所有查询集/管理器都以并行结构组织到各个 django 应用程序中的 manager.py 文件夹中的每个模型。
由于管理器是一个类级别的属性,将它们添加到 init 中是行不通的,而且 django 做了一些非常漂亮的元编程,那么正确的方法是什么? Django 1.7 和 1.8 都是可以接受的。谢谢
(我知道 pythonic 方式显式比隐式好,但这里似乎有很多 crud 代码,所以是否有 Meta 方式来执行此操作。)
请您参考如下方法:
你可以写一个工厂函数来创建proxy models像这样:
def model_with_queryset(model_class, queryset_class):
class Proxy(model_class):
objects = queryset_class.as_manager()
class Meta:
proxy = True
app_label = model_class._meta.app_label
return Proxy
这里的 model_class 可以是您想要更改查询集的任何模型。
然后您可以动态创建模型类:
SomeModelWithSomeQS = model_with_queryset(SomeModel, SomeQS)
并将它们用作任何其他(代理)模型。
