【发布时间】:2011-04-10 11:22:50
【问题描述】:
我最近在我的 Django 模型中遇到了 ForeignKey 冲突。我需要有两个外键(owner、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?如有任何帮助,我将不胜感激!
【问题讨论】:
-
您是否可能在另一个模型/应用程序中也有相同的字段/字段具有相似的相关名称?
-
我有一个 BaseWidget(带有所有者),它被许多模型继承。所以几乎我所有的模型都会继承 BaseWidget 并因此拥有所有者。 assign_to 仅存在于任务中
-
BaseWidget可能是abstract模型吗? -
是的,先生,这是一个抽象模型。