【问题标题】:Django - Model with 2 foreign keys from the same classDjango - 具有来自同一类的 2 个外键的模型
【发布时间】:2026-01-09 18:30:01
【问题描述】:

我想要一个 Django 模型,它具有来自同一个表的 2 个外键。这是一个事件表,有 2 列供员工使用:“家”和“离开”。但我收到此错误:错误:一个或多个模型未验证...

class Team(models.Model):
    name = models.CharField(max_length=200)

class Match(models.Model):
    home = models.ForeignKey(Team)
    away = models.ForeignKey(Team)

对此有任何想法。谢谢!

【问题讨论】:

标签: django django-models


【解决方案1】:

Match 模型更改为使用related_name

class Match(models.Model):
    home = models.ForeignKey(Team, related_name="home_set")
    away = models.ForeignKey(Team, related_name="away_set")

文档中有关于related_name 的说法:

用于从相关对象到此对象的关系的名称。

您收到错误是因为从Team 方面将有两个关系,它们都有名称,即。 match。您将使用team.match_setTeam 方面引用此内容。通过更改第二个 FK 的 related_name,您可以解决此问题。

更新

作为@Török Gábor said,您现在可以分别使用team.home_setteam.away_set

【讨论】:

    【解决方案2】:

    Django 也向后遵循关系。默认情况下,它会在您的 Team 对象上创建属性 match_set。因为您引用了两次Team,所以您必须通过在ForeignKeys 上提供related_name attribute 来区分这些向后的属性。

    class Match(models.Model):
        home = models.ForeignKey(Team, related_name='home_set')
        away = models.ForeignKey(Team, related_name='away_set')
    

    【讨论】:

    • @Matthew Rankin:这是我的错误,抱歉,但我已经意识到了这一点。
    最近更新 更多