Переопределить связанный менеджер в унаследованной модели - PullRequest
0 голосов
/ 25 февраля 2019

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

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

Спасибо!

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