两个外键引用对方的表,NameError
Two tables with foreign key referencing the other, NameError
我正在尝试使用 peewee 在数据库中使用外键创建 tables。
玩家 table 拥有团队 table 的外键,团队 table 拥有玩家 table 的外键。当我 运行 我的代码得到
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()
有人可以帮助我吗? :)
您收到此错误是因为您在定义 Team
之前在 Player
中引用了 Team
。你在这里有一个循环依赖。 Team
依赖于 Player
而 Player
依赖于 Team
.
我的第一个建议是删除其中一个依赖项。您真的需要在两个表中引用另一个吗?
如果你这样做,那么 peewee 文档有一整节专门处理这种情况:http://peewee.readthedocs.org/en/latest/peewee/models.html#circular-foreign-key-dependencies
您需要使用 DeferredForeignKey,它使用 Django 风格的字符串类型方法,但需要注意的是它不会为您创建数据库约束
因此
team = ForeignKeyField(Team)
使用
team = DeferredForeignKeyField('Team')
之后
db.create_tables([Player,Team])
Player._schema.create_foreign_key(Player.team)
我正在尝试使用 peewee 在数据库中使用外键创建 tables。
玩家 table 拥有团队 table 的外键,团队 table 拥有玩家 table 的外键。当我 运行 我的代码得到
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()
有人可以帮助我吗? :)
您收到此错误是因为您在定义 Team
之前在 Player
中引用了 Team
。你在这里有一个循环依赖。 Team
依赖于 Player
而 Player
依赖于 Team
.
我的第一个建议是删除其中一个依赖项。您真的需要在两个表中引用另一个吗?
如果你这样做,那么 peewee 文档有一整节专门处理这种情况:http://peewee.readthedocs.org/en/latest/peewee/models.html#circular-foreign-key-dependencies
您需要使用 DeferredForeignKey,它使用 Django 风格的字符串类型方法,但需要注意的是它不会为您创建数据库约束
因此
team = ForeignKeyField(Team)
使用
team = DeferredForeignKeyField('Team')
之后
db.create_tables([Player,Team])
Player._schema.create_foreign_key(Player.team)