繁体   English   中英

related_name参数在Django模型中无法正常工作?

[英]related_name argument not working as expected in Django model?

我最近在Django模型中遇到了ForeignKey冲突。 我需要有两个最终指向同一模型(用户)的外键(所有者,assigned_to)。

据我了解,我需要一个related_name参数来解决该问题。 所以我做到了:

assigned_to = models.ForeignKey(TaskUser, blank=True, null=True, related_name='user_assignment')

owner = models.ForeignKey(TaskUser, related_name="user_ownership"

但我仍然遇到错误:

tasks.task: Accessor for field 'owner' clashes with related field 'TaskUser.user
_ownership'. Add a related_name argument to the definition for 'owner'.
tasks.task: Reverse query name for field 'owner' clashes with related field 'TaskUser.user_ownership'. Add a related_name argument to the definition for 'owner'.

为什么我仍然收到此错误?

有一个陷阱, owner在超类(BaseWidget)中, assigned_to在子类(Task)中。 在继承关系中使用related_name是否存在问题? 我是否需要重写所有者的继承并在子类中重新定义related_name 我将不胜感激!

如果抽象基类中具有ForeignKey关系,则从它继承的每个类都将具有此关系。 结果,您不能对其related_name “硬编码”,因为所有子类都将尝试在该实际类(本例中为TaskUser )上创建相同的访问器。

您最好执行以下操作:

owner = models.ForeignKey(TaskUser, related_name="%(app_label)s_%(class)s_ownership")

请参阅django文档

如果在抽象基类中使用related_name,则需要在其中使用'%(app_label)s'和'%(class)s'。 在Django文档中提到

小心related_name

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM