两个表的外键引用另一个,NameE

2024-04-25 13:34:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用peewee在数据库中创建带有外键的表。
玩家表对团队表有ForeignKey,团队表对Player table有ForeignKey。当我运行代码时 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()

有人能帮我吗?:)


Tags: 代码namemodeltable团队lengthdatabasemax
2条回答

出现此错误是因为您在定义Team之前引用了Player中的Team。你有一个循环依赖。Team依赖于Player,而{}依赖于{}。在

我的第一个建议是放弃一个依赖关系。你真的需要在两个表中引用另一个吗?在

如果您这样做,那么peewee文档有一个完整的部分专门用来处理这种情况:http://peewee.readthedocs.org/en/latest/peewee/models.html#circular-foreign-key-dependencies

您需要使用DeferredForeignKey这使用Django样式的类型作为字符串方法,但是附带一个警告:它不会为您创建数据库约束

所以

team = ForeignKeyField(Team)

使用

^{pr2}$

后来呢

db.create_tables([Player,Team])
Player._schema.create_foreign_key(Player.team)

相关问题 更多 >