Django多个外键,无中间模型

时间:2017-05-10 12:31:35

标签: python django orm

我正在尝试在中间模型中使用多个外键。来自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

1 个答案:

答案 0 :(得分:0)

从错误消息中看起来我的中间模型配置有问题。然而事实证明,我实际上有一个问题,我的Django内联是如何指定的(这不是上面的代码,因为我没有意识到它是相关的):

class Model3Inline(admin.TabularInline):
    model = Model3
    extra = 1

class Model3(admin.ModelAdmin):
    inlines = (Model4,)

内联尝试自动分配给相关字段,但不知道要选择哪个外键引用,抛出错误。

在我的情况下,这是一个错误,我想删除此引用,因为它不是我想要做的。对该主题的简要搜索强调了在单个模型中使用多个外键时使用fk_name指定特定字段。