Переопределить связанный менеджер в унаследованной модели

Странная проблема при работе с моделями 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,

Любые идеи, почему это не вступает в силу, или другой подход, который я мог бы использовать для этой проблемы?

Спасибо!

0 ответов

Другие вопросы по тегам