Странная проблема при работе с моделями 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
.
Любые идеи, почему это не вступает в силу, или другой подход, который я мог бы использовать для этой проблемы?
Спасибо!