我想要一个带有来自同一个表的2个外键的Django模型.这是一个事件表,有2列供员工使用:'actor'和'receiver'.但我得到这个错误:
错误:一个或多个模型未验证:tasks.task:中间模型TaskEvent有多个Employee的外键,这是不明确的,不允许.
有没有更好的方法来模拟这个?谢谢
我想我要加一张TaskEvent_to_Employee
桌子.其中将有两条记录,每条记录与两条记录相关TaskEvent
.有人知道更简单的解决方法吗?
我还没有这样做,但我使用了inspectdb从现有的数据库中生成了models.py文件,这个文件正是这样做的 - 这就是inspectdb扔回来的,所以它应该工作:
creator = models.ForeignKey(Users, null=True, related_name='creator') assignee = models.ForeignKey(Users, null=True, related_name='assignee')
希望对你有用 - 如果不是,我也会遇到问题.
我认为你要找的是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/
从错误信息,这听起来像你试图把两个外键同一个对象上通过使用一个中间表的through
参数ManyToManyField
,在针对文档指出:
设置中间模型时,您明确指定ManyToMany关系中涉及的模型的外键.此显式声明定义了两个模型的关联方式.
中间模型有一些限制:
您的中间模型必须包含一个 - 且只有一个 - 目标模型的外键(在我们的示例中,这将是Person).如果您有多个外键,则会引发验证错误.
您的中间模型必须包含一个 - 且只有一个 - 源模型的外键(在我们的示例中,这将是Group).如果您有多个外键,则会引发验证错误.