有没有人知道为什么这不能按预期工作。
如果我使用python shell并执行
team.game_set
或
team.games
它返回错误
AttributeError: 'Team' object has no attribute 'game'
如果我创建一个Game对象并调用
game.home_team
它返回正确的团队对象
继承我的模特
class Team(models.Model):
name = models.CharField(blank=True, max_length=100)
class Game(models.Model):
home_team = models.ForeignKey(Team, related_name="home_team")
更新
我已通过删除related_name更新了模式,现在我收到此错误
app.game: Accessor for field 'home_team' clashes with related field 'Team.game_set'. Add a related_name argument to the definition for 'home_team'.
答案 0 :(得分:2)
好吧,您设置了related_name
属性。来自documentation:
<强> ForeignKey.related_name 强>
用于相关对象与此对象之间关系的名称。有关完整说明和示例,请参阅related objects documentation。请注意,在抽象模型上定义关系时必须设置此值;当你这样做时,可以使用一些特殊的语法。
因此,如果您想通过访问对象。 team.game_set
您必须删除此参数:
class Game(models.Model):
home_team = models.ForeignKey(Team)
或者您通过属性home_team
访问游戏(但我想您只是误解了related_name
的含义):
team.home_team
如果您的班级通常会guest_team
属性或与Team
有多个关系,则必须设置相关名称,并且可能希望有类似的内容:
class Game(models.Model):
home_team = models.ForeignKey(Team, related_name="home_games")
guest_team = models.ForeignKey(Team, related_name="guest_games")
然后您可以通过team.home_games
和team.guest_games
访问游戏。