我在两个模型之间有一个多对多的关系,User
和{UserRoleThrough
实现,它有两个{User
,另一个引用Role
。我从文档中了解到,ON DELETE功能是通过使用on_delete
参数初始化ForeignKeyField
来支持的。虽然不太清楚on_delete
可以取什么值,documentation给出了一个例子,例如'CASCADE'
。尽管如此,on_delete='CASCADE'
似乎没有效果,因为试图从父表中删除一行会引发错误。在
peewee.IntegrityError: FOREIGN KEY constraint failed
使用数据库浏览器检查生成的架构会发现外键不是用ON DELETE声明的。在
^{pr2}$我做错什么了?如何使on_delete
工作?下面是一个使用Python3.6和Peewee 3.0.2的最小可重复性示例。在
import peewee
db_proxy = peewee.Proxy()
class BaseModel(peewee.Model):
class Meta:
database = db_proxy
class User(BaseModel):
name = peewee.CharField()
class Role(BaseModel):
name = peewee.CharField()
class UserRoleThrough(BaseModel):
user = peewee.ForeignKeyField(User, on_delete='CASCADE')
role = peewee.ForeignKeyField(Role, on_delete='CASCADE')
if __name__ == '__main__':
db = peewee.SqliteDatabase('test.db')
db.pragma('foreign_keys', 1, permanent=True)
db_proxy.initialize(db)
tables = [
User,
Role,
UserRoleThrough
]
db.create_tables(tables)
isaac = User.create(name='Isaac')
admin = Role.create(name='Admin')
UserRoleThrough.create(user=isaac, role=admin)
User.delete().execute()
这是在3.0.6中修复的:github.com/coleifer/peewee/blob/master/CHANGELOG.md#306
相关问题 更多 >
编程相关推荐