Django - 具有来自同一类的2个外键的模型

时间:2010-09-17 14:40:46

标签: django django-models

我想要一个带有来自同一个表的2个外键的Django模型。这是一个事件表,有2列供员工使用:'home'和'away'。但我收到此错误:错误:一个或多个模型未验证...

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

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

对此有任何想法。谢谢!

2 个答案:

答案 0 :(得分:6)

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。您将使用Teamteam.match_set方面引用此内容。通过更改第二个FK的related_name,你正在解决这个问题。

<强>更新

As @TörökGáborsaid,您现在可以分别使用team.home_setteam.away_set

答案 1 :(得分:6)

Django也追随关系。默认情况下,它会在match_set个对象上创建属性Team。由于您引用了Team两次,因此必须在ForeignKey上提供related_name attribute来区分这些向后属性。

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