我想要一个带有来自同一个表的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)
对此有任何想法。谢谢!
答案 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
。您将使用Team
从team.match_set
方面引用此内容。通过更改第二个FK的related_name
,你正在解决这个问题。
<强>更新强>
As @TörökGáborsaid,您现在可以分别使用team.home_set
和team.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')