当前位置:  开发笔记 > 后端 > 正文

Django模型与同一个表中的2个外键

如何解决《Django模型与同一个表中的2个外键》经验,为你挑选了3个好方法。

我想要一个带有来自同一个表的2个外键的Django模型.这是一个事件表,有2列供员工使用:'actor'和'receiver'.但我得到这个错误:

错误:一个或多个模型未验证:tasks.task:中间模型TaskEvent有多个Employee的外键,这是不明确的,不允许.

有没有更好的方法来模拟这个?谢谢

我想我要加一张TaskEvent_to_Employee桌子.其中将有两条记录,每条记录与两条记录相关TaskEvent.有人知道更简单的解决方法吗?



1> Technical Ba..:

我还没有这样做,但我使用了inspectdb从现有的数据库中生成了models.py文件,这个文件正是这样做的 - 这就是inspectdb扔回来的,所以它应该工作:

creator = models.ForeignKey(Users, null=True, related_name='creator')
assignee = models.ForeignKey(Users, null=True, related_name='assignee')

希望对你有用 - 如果不是,我也会遇到问题.


不是related_name链接回包含使用'related_name'的属性的模型,因此在上面的示例中,您不会将related_name更改为'createe'和'assignor',因为如果有人要访问对象'受让人'在你的例子中他们会得到'转让人'?
祝你好好解决问题.:P

2> Justin Abrah..:

我认为你要找的是ForeignKeyFields上的related_name属性.这将允许您引用同一个表,但为该关系提供django特殊名称.

更多信息:

https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name

https://docs.djangoproject.com/en/dev/topics/db/queries/#backwards-related-objects

https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_one/



3> Jonny Buchan..:

从错误信息,这听起来像你试图把两个外键同一个对象上通过使用一个中间表的through参数ManyToManyField,在针对文档指出:

设置中间模型时,您明确指定ManyToMany关系中涉及的模型的外键.此显式声明定义了两个模型的关联方式.

中间模型有一些限制:

您的中间模型必须包含一个 - 且只有一个 - 目标模型的外键(在我们的示例中,这将是Person).如果您有多个外键,则会引发验证错误.

您的中间模型必须包含一个 - 且只有一个 - 源模型的外键(在我们的示例中,这将是Group).如果您有多个外键,则会引发验证错误.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有