При использовании диспетчера пользовательских моделей, как показано в документации и примерах, которые я нашел, настраиваемые менеджеры помещаются в тот же исходный файл, что и модель.
В моем файле 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):