Переопределить связанный менеджер в унаследованной модели
Странная проблема при работе с моделями Django и связанными полями / менеджерами, надеюсь, кто-то сталкивался с этой проблемой раньше.
У меня определена следующая структура модели:
class CustomManager(models.Manager):
use_for_related_fields = True
def __init__(self, *args, **kwargs):
self._param = kwargs.pop("param", True)
super().__init__(*args, **kwargs)
class MyModel(models.Model):
id = models.AutoField(primary_key=True)
class BaseRelatedModel(models.Model):
id = models.AutoField(primary_key=True)
objects = CustomManager()
class SubRelatedModel(BaseRelatedModel):
related = models.ForeignKey(MyModel, related_name="related_objs", on_delete=models.CASCADE)
objects = CustomManager(param=False)
Как видите, у меня есть BaseRelatedModel
который устанавливает своего менеджера в качестве экземпляра CustomManager
, который устанавливает значение по умолчанию _param
значение для True
, Затем я подкласс этой модели в SubRelatedModel
и попытаться переопределить objects
менеджер с новым экземпляром CustomManager
На этот раз установил его param
значение для False
,
Переопределение менеджера не работает, когда я пытаюсь получить доступ ко всем связанным SubRelatedModel
объекты из данного MyModel
пример.
In [1]: BaseRelatedModel.objects._param
Out[1]: True
In [2]: SubRelatedModel.objects._param
Out[2]: False
In [3]: m = MyModel.objects.create()
In [4]: m.related_objs._param
Out[4]: True
Я бы ожидал m.related_objs._param
возвращать False
, так как это параметр objects
менеджер на SubRelatedModel
,
Любые идеи, почему это не вступает в силу, или другой подход, который я мог бы использовать для этой проблемы?
Спасибо!