这是我的模特
class Subscriber(models.Model):
...
tenant = models.ForeignKey(Tenant, on_delete=models.CASCADE, null=True)
...
这是根据sqlmigrate
(以及手动检查数据库)生成的SQL:
ALTER TABLE `myapp_subscriber` ADD CONSTRAINT `myapp_subscriber_tenant_id_b52815ee_fk_myapp_tenant_id` FOREIGN KEY (`tenant_id`) REFERENCES `myapp_tenant` (`id`);
我期待的是类似this的东西:
CREATE TABLE child (
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;
使用ON DELETE CASCADE
。
MySql
(实际上是MariaDB
)在删除时抱怨:
SQL Error (1451): Cannot delete or update a parent row: a foreign key constraint fails
这很有意义,因为没有ON DELETE CASCADE
子句。
为什么Django 2.1.5
不遵守ON DELETE CASCADE
子句?
答案 0 :(得分:2)
来自docs:
on_delete
不在数据库中创建SQL约束。支持 数据库级别的级联选项可能会在以后实现
它将在Django本身中执行级联,因此,如果您使用Django Tenant
删除delete()
对象,您的Subscriber
对象也将被删除。但是如果您使用SQL进行操作,则不会。