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

Jos*_*osh 44 django foreign-keys ambiguity

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

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

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

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

Tec*_*ard 85

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

creator = models.ForeignKey(Users, null=True, related_name='creator')
assignee = models.ForeignKey(Users, null=True, related_name='assignee')
Run Code Online (Sandbox Code Playgroud)

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

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

Ale*_*lig 9

使用related_name是我的解决方案:

class Sample(models.model):
    ...

class Mymodel(models.model):
    example1 = models.ForeignKey(Sample, related_name='sample1')
    example2 = models.ForeignKey(Sample, related_name='sample2')
Run Code Online (Sandbox Code Playgroud)


Jon*_*nan 7

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

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

中间模型有一些限制:

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