Skip to main content
 首页 » 编程设计

python之如何动态添加自定义管理器以在 Django 中建模

2024年10月24日43jackei

在这个 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) 

并将它们用作任何其他(代理)模型。