在使用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
管理器的参数。
有什么想法为什么没有生效,或者我可以用其他方法解决这个问题?
谢谢!