Django模型的帮助

时间:2010-05-27 14:57:02

标签: django model

有没有人知道为什么这不能按预期工作。

如果我使用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'.

1 个答案:

答案 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_gamesteam.guest_games访问游戏。