【问题标题】:Django model helpDjango 模型帮助
【发布时间】:2010-05-27 14:57:01
【问题描述】:

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

如果我使用 python shell 并做

team.game_set

team.games

返回错误

AttributeError: 'Team' object has no attribute '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'.

【问题讨论】:

    标签: django model


    【解决方案1】:

    好吧,你设置了related_name 属性。来自documentation

    ForeignKey.related_name
    用于从 related 对象到此对象的关系的名称。有关完整说明和示例,请参阅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 访问游戏。

    【讨论】:

    • @dotty:这些是你的类的完整定义吗?如果您与同一模型有多个关系,则必须使用文档中提到的related_name
    • 好吧,我有 home_team 和 away_team,我想使用 home_games 和 away_games 会很好用。
    • 很好解释的答案,非常感谢。帮助我更多地理解了related_name。
    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 2016-07-06
    • 2013-01-03
    • 1970-01-01
    • 2015-09-28
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多