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

anh*_*ran 3 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)
Run Code Online (Sandbox Code Playgroud)

对此有任何想法.谢谢!

Tör*_*bor 7

Django也追随关系.默认情况下,它会match_setTeam对象上创建属性.因为您引用了Team两次,所以必须通过在s 上提供related_name属性来区分这些向后属性ForeignKey.

class Match(models.Model):
    home = models.ForeignKey(Team, related_name='home_set')
    away = models.ForeignKey(Team, related_name='away_set')
Run Code Online (Sandbox Code Playgroud)


Man*_*dan 6

更改Match要使用的模型related_name.

class Match(models.Model):
    home = models.ForeignKey(Team, related_name="home_set")
    away = models.ForeignKey(Team, related_name="away_set")
Run Code Online (Sandbox Code Playgroud)

该文档有这样的说法related_name:

用于从相关对象返回到此关系的关系的名称.

你得到的错误是因为从Team侧面会有两个关系,他们都会有名字,即.match.你可以从Team侧面使用这个team.match_set.通过改变related_name第二个FK你正在解决这个问题.

更新

正如@TörökGábor 所说,你现在可以分别使用team.home_setteam.away_set.