Django Зависимость модели / менеджера - PullRequest
0 голосов
/ 30 апреля 2020

При использовании диспетчера пользовательских моделей, как показано в документации и примерах, которые я нашел, настраиваемые менеджеры помещаются в тот же исходный файл, что и модель.

В моем файле models.py есть базовый класс с четырьмя подклассами и базовый класс имеет несколько методов stati c для обеспечения некоторых распространенных запросов. Мне нужно будет добавить немало пользовательских запросов. Я бы предпочел поместить их в Custom Model Manager, который является базовым классом для каждого из подклассов Model Manager. Я также хотел бы иметь возможность разделить менеджеров моделей в отдельный исходный файл с именем Manager.py, чтобы сделать код менее беспорядочным.

Проблема заключается в том, что между моделями и менеджерами существует циклическая c зависимость.

Есть ли способ установить для менеджера переменную "objects" по имени вместо фактической Модель менеджера класса? Или, может быть, каким-то другим способом можно поместить код в два отдельных файла?

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):


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...