我最近在我的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'.

为什么我仍然收到这个错误?

There is one catch, owner is in a super class (BaseWidget) 和 assigned_to is in a sub class (Task). Are there issues with using related_name in an inheritance relationship? Do I need to just override the inheritance of owner 和 redefine related_name in the sub class instead? I'd appreciate any help!

推荐答案

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

你最好这样做:

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

看看这上面的django docs.

Django相关问答推荐

Django Signals:从实例访问ManyToManyRel值

查尔而不是瓦尔查尔加盟Django 球场

把Django测试和testcafe结合起来?

我如何告诉Django如何恢复自定义迁移?

APIView查询未返回任何结果

django 无法识别实现自定义后端

Django中的InvalidOperation错误[]

无法迁移,模型中的外键导致了问题

如何将 select_related 应用于 Django 中的 m2m 关系的对象?

"" 需要有字段 "id" 的值才能使用这种多对多关系

Playframework 和 Django

如何在 Django 中创建一个独特的 slug

Django Blob 模型字段

Django 自定义管理器 - 如何仅返回登录用户创建的对象?

如何迭代模板中 SelectField 的选项?

为用户添加自定义权限

如何在django中生成临时文件然后销毁

模拟 Django 查询集以测试采用查询集的函数

如何将 settings.py 中的变量传递给视图?

django.core.servers.basehttp.FileWrapper 在 Django 1.9 中消失