2010-05-27 101 views
0

有沒有人有任何線索爲什麼這不按預期方式工作。Django模型幫助

如果我使用Python外殼,並做

team.game_set 

team.games 

如果我創建一個遊戲對象,並調用

game.home_team 
它返回一個錯誤

AttributeError: 'Team' object has no attribute 'game' 

它返回正確的團隊對象

我的繼承人模型

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") 

UPDATE

我已經通過去除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'. 

回答

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訪問遊戲。

+0

查看我的問題更新。 – dotty 2010-05-27 15:10:18

+0

@dotty:這些是你的類的完整定義嗎?如果您與同一模型有多個關係,則必須使用文檔中提到的'related_name'。 – 2010-05-27 15:13:59

+0

嗯,我有home_team和away_team,我想使用home_games和away_games會很好。 – dotty 2010-05-27 15:15:47