两个外键引用对方的表,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 依赖于 PlayerPlayer 依赖于 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)