我正在尝试在中间模型中使用多个外键。来自Django documentation:
您的中间模型必须包含一个 - 且只有一个 - 源模型的外键(在我们的示例中这将是Group),或者您必须使用ManyToManyField.through_fields显式指定Django应该用于关系的外键。如果您有多个外键并且未指定through_fields,则会引发验证错误。类似的限制适用于目标模型的外键(在我们的示例中,这将是Person)。
对我来说,这意味着我应该能够使用对无目标或源模型的多个引用,假设我已经指定了外键,它不是源或目标。但是下面的示例我仍然会收到以下错误:
“IntermediaryModel”有多个ForeignKey到'app.Model3'
我已经删除了下面的代码,只包括我遇到此问题的四个模型之间的关系。模特关系在哪里出错?
class Model1(models.Model):
...
class Model2(models.Model):
field1 = models.ManyToManyField(Model1,
through='Model4',
through_fields=('field1', 'field2'))
class Model3(models.Model):
field1= models.ForeignKey(Model1)
field2 = models.ForeignKey(Model2)
class Model4(models.Model):
field1 = models.ForeignKey(Model2)
field2= models.ForeignKey(Model1)
field3= models.ForeignKey(Model3, null=True)
field4 = models.ForeignKey(Model3, null=True)
使用Python 2.7,Django v1.11
答案 0 :(得分:0)
从错误消息中看起来我的中间模型配置有问题。然而事实证明,我实际上有一个问题,我的Django内联是如何指定的(这不是上面的代码,因为我没有意识到它是相关的):
class Model3Inline(admin.TabularInline):
model = Model3
extra = 1
class Model3(admin.ModelAdmin):
inlines = (Model4,)
内联尝试自动分配给相关字段,但不知道要选择哪个外键引用,抛出错误。
在我的情况下,这是一个错误,我想删除此引用,因为它不是我想要做的。对该主题的简要搜索强调了在单个模型中使用多个外键时使用fk_name指定特定字段。