2015-01-16 58 views
0

我試圖創建與數據庫中的外鍵與peewee表。
球員表具有ForeignKey到Team表和Team表具有ForeignKey到Player表。當我運行我的代碼我得到 NameError: name 'Team' is not defined
這裏是我的代碼:兩個表的外鍵引用其他,NameError

class Player(Model): 
    nickname = CharField(max_length=30) 
    steam_id = CharField(max_length=15) 
    team = ForeignKeyField(Team) 
    class Meta: 
     database = db 

class Team(Model): 
    name = CharField(max_length=30) 
    captain = ForeignKeyField(Player) 
    class Meta: 
     database = db 
Player.create_table() 
Team.create_table() 

有人能幫助我嗎? :)

+0

我不知道peewee只有SQL,但你不能設置FK到「類」 /表在SQL中不存在。我想在這裏是一樣的。您可以嘗試在創建這兩個類後添加FK。除此之外,您可以在Team'Player類中獲得3個屬性:玩家,團隊和隊長。所以你避免穿越FKs – bish

+0

感謝您的快速回答! setattr(Team,「隊長」,ForeignKeyField(Player)),'setattr(Player,「team」,ForeignKeyField(Team))'修復了這個問題:) – KsaneK

+0

這種方法實際上不會很好,因爲某些鉤子在元類/模型類創建期間運行。如果你想動態添加一個字段,你應該調用「field.add_to_class(model_class,field_name)」。這將負責正確設置屬性並運行掛鉤。 *最佳/正確答案*,但是,在下面的答案部分列出。 – coleifer

回答

1

你得到這個錯誤,因爲你在Team定義 Team。你在這裏有一個循環依賴。 Team取決於PlayerPlayer取決於Team

我的第一個建議是放棄依賴項之一。你真的需要在兩個表中引用另一個嗎?

如果你這樣做,那麼peewee文檔有一個專門用來處理這種情況一整節:http://peewee.readthedocs.org/en/latest/peewee/models.html#circular-foreign-key-dependencies

+0

這是處理循環FK的正確方法。 – coleifer

相關問題