Django's models.CASCADE в базе данных Postgres с помощью db_constraint

Очевидно, что когда я пытаюсь удалить родительский объект, специально возникает ошибка целостности e

IntegrityError at /admin/app/parent/(attempted to delete the parent object from admin & later shell)

update or delete on table "app_parent" violates foreign key constraint "app_child_model_id_724b75c4_fk_app_parent_id" on table "app_child" DETAIL: Key (id)=(2) is still referenced from table "app_child"

После гугления и некоторых ответов на stackoverflow я решил заменить models.CASCADE на models.DO_NOTHING. Один раз удаление сработало хорошо, но позже я столкнулся с той же ошибкой.

Мой код просто базовый

class Parent(models.Model):
    pass
class Child(models.Model):
    parent = models.ForeignKey(Parent, on_delete=models.CASCADE)

И я увидел эту страницу документации по postgres

https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/constraints/

Я не могу полностью понять технические аспекты. Было бы неплохо, если бы кто-нибудь объяснил и, возможно, продемонстрировал правильную работу кода, скажем, с моделью с именем Parent и моделью с именем Child, содержащей поле внешнего ключа для Parent, конкретно для Postgres. Я плохо разбираюсь в БД, поэтому мне нужна ваша помощь.

Спасибо!!!

Редактирование: Да. Я запустил свои миграции. И проверяя отношения в оболочке psql, я вижу ограничения foreignkey, существующие на уровне db_level. Что-то вроде

"app_child_parent_id_724b75c4_fk_app_parent_id" FOREIGN KEY (parent_id) REFERENCES app_parent(id) DEFERRABLE INITIALLY DEFERRED

Как мне преодолеть этот конфликт между Django и Postgres?

В документации Django по SQL, на которую я ссылался выше, также говорится, что "Если вы пытаетесь вставить новый ряд, который конфликтует с существующим рядом, возникает ошибка IntegrityError. Аналогично, если обновление конфликтует с существующим рядом."

Но я не понимаю, как использовать атрибут ограничения в мета-опциях модели?

Также, что если я установлю db_constraint = False ?

https://docs.djangoproject.com/en/3.2/ref/models/fields/#:~:text=ForeignKey.db_constraint%C2%B6,its%20DoesNotExist%20exception

Вернуться на верх