Джанго не чтит НА УДАЛЕННОМ КАСКАДЕ - PullRequest
0 голосов
/ 18 февраля 2019

Это моя модель:

class Subscriber(models.Model):
    ...
    tenant = models.ForeignKey(Tenant, on_delete=models.CASCADE, null=True)
    ...

Это сгенерированный SQL, в соответствии с sqlmigrate (и с ручной проверкой базы данных):

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?

1 Ответ

0 голосов
/ 18 февраля 2019

Из документов :

on_delete не создает ограничение SQL в базе данных.Поддержка параметров каскада на уровне базы данных может быть реализована позже

. Она будет выполнять каскад в самом Django, поэтому если вы удалите объект Tenant с помощью Django delete(), ваш Subscriber объект также будетбыть удаленным.Но нет, если вы делаете это в SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...