首页 > 解决方案 > Django 模型/管理器依赖

问题描述

当按照我找到的文档和示例中显示的方式使用自定义模型管理器时,自定义管理器与模型放置在相同的源文件中。

我的 models.py 文件有一个基类和四个子类,基类有几个静态方法来提供一些常见的查询。我需要添加很多自定义查询。我更愿意将这些放在自定义模型管理器中,它是每个模型管理器子类的基类。我还希望能够将模型管理器分离到一个名为 manager.py 的单独源文件中,以使代码不那么混乱。

问题是模型和管理器之间存在循环依赖关系。

有没有办法通过名称而不是实际的模型管理器类将管理器设置为“对象”变量?或者也许有其他方法可以将代码放入两个单独的文件中?

models.py

class MyBaseModelClass(models.Model):  (abstract)
    list_of_values (Many to Many Field)

class class SubclassA(MyBaseModelClass):
    objects = SubclassAManager()
    # list_of_values pulled from external system

class class SubclassB(MyBaseModelClass):
    objects = SubclassBManager()
    # list_of_values manually added by the user in the UI and stored in the DB

class class SubclassC(MyBaseModelClass):
    objects = SubclassCManager()
    # list_of_values derived from subclass fields and not stored in the DB

class class SubclassD(MyBaseModelClass):
    objects = SubclassDManager()
    # list_of_values derived from subclass fields and not stored in the DB


managers.py

class MyCustomBaseManager(models.Manager):
    # Does custom queries that do calculations and other data manipulations that are common to all of the 
    # Subclasses. Note that MyBaseModelClass can't have a Manager because it is Abstract.

class SubclassAManager(MyCustomBaseManager):

class SubclassBManager(MyCustomBaseManager):

class SubclassCManager(MyCustomBaseManager):

class SubclassDManager(MyCustomBaseManager):


标签: djangodjango-models

解决方案


推荐阅读