gpt4 book ai didi

python - Django on_delete=models.CASCADE 在 SQL 级别没有效果

转载 作者:IT老高 更新时间:2023-10-29 00:00:45 26 4
gpt4 key购买 nike

我的models.py文件包含:

class User(models.Model):
email = models.CharField(max_length=100, unique=True)
password = models.CharField(max_length=100)
create_time = models.DateTimeField(auto_now_add=True)

class Session(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
token = models.CharField(max_length=100, unique=True)

当我命令 python manage.py makemigrations然后命令 python manage.py sqlmigrate <app_name> <migration_name>我没有看到任何说“ON DELETE=CASCADE”的内容

但是,当我键入 python manage.py migrate 时,迁移不会失败。 .

现在,如果我转到 mysql 表(使用 SequelPro)并尝试为当前具有 session 条目的用户删除一行,我会收到以下错误:“未删除一行. 重新加载表以确保其内容在此期间没有更改。检查控制台以查看此表的主键中可能存在的错误!"。

现在,当我转到 session 表并删除此用户的 session ,然后尝试从用户表中删除用户的行时,它会正确删除。这表示 ON DELETE = CASCADE实际上并没有在 MySQL 级别工作。

如何改正?

最佳答案

来自docs (强调我的):

ForeignKey.on_delete

When an object referenced by a ForeignKey is deleted, Django will emulate the behavior of the SQL constraint specified by the on_delete argument.

Django 实际上并没有在数据库中设置 ON DELETE 子句。如果需要,可以使用 RunSQL 手动添加一个手术。请务必使用相同的索引名称,或保留原始索引,否则稍后可能会出错。

关于python - Django on_delete=models.CASCADE 在 SQL 级别没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35780443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com