我试图用peewee在数据库中创建带有外键的表
Player表具有ForeignKey to Team表,Team表具有ForeignKey to Player表。当我运行我的代码时,我得到了
NameError: name 'Team' is not defined
这是我的代码:
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 :(得分:0)
您收到此错误是因为在定义Team
之前,您在Player
中引用了Team
。你有一个循环依赖。 Team
取决于Player
而Player
取决于Team
。
我的第一个建议是删除其中一个依赖项。你真的需要在两个表中引用另一个吗?
如果你这样做,那么peewee docs会有一整段用于处理这种情况:http://peewee.readthedocs.org/en/latest/peewee/models.html#circular-foreign-key-dependencies
答案 1 :(得分:0)
您需要使用DeferredForeignKey,它使用Django样式的字符串输入法,但附带说明它不会为您创建数据库约束
所以
team = ForeignKeyField(Team)
使用
team = DeferredForeignKeyField('Team')
然后再
db.create_tables([Player,Team])
Player._schema.create_foreign_key(Player.team)