两个表,外键引用另一个,NameError

问题描述 投票:0回答:2

我正在尝试使用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()

有人能帮我吗? :)

python foreign-keys peewee
2个回答
0
投票

你得到这个错误是因为你在定义Team之前在Player中引用了Team。你有一个循环依赖。 Team依赖于PlayerPlayer依赖于Team

我的第一个建议是删除其中一个依赖项。你真的需要在两个表中引用另一个吗?

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


0
投票

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

因此对于

team = ForeignKeyField(Team)

使用

team = DeferredForeignKeyField('Team')

然后是

db.create_tables([Player,Team])
Player._schema.create_foreign_key(Player.team)
© www.soinside.com 2019 - 2024. All rights reserved.