Для управления удалением связанных записей необходимо использовать для models.ForeignKey флаг on_delete который может принимать следующие значения
-
- CASCADE
-
Каскадное удаление, значение по умолчанию.
-
- PROTECT
-
Препятствует удалению связанного объекта вызывая исключение django.db.models.ProtectedError`(подкласс :exc:`django.db.IntegrityError).
-
- SET_NULL
-
Устанавливает ForeignKey в NULL; возможно только если null равен True.
-
- SET_DEFAULT
-
Устанавливает ForeignKey в значение по умолчанию; значение по-умолчанию должно быть указано для ForeignKey.
-
- SET()
-
Устанавливает ForeignKey в значение указанное в SET(). Если указан выполняемый объект, результат его выполнения. Вызываемый объект можно использовать, чтобы избежать запросов во время импорта models.py:
from django.db import models from django.contrib.auth.models import User def get_sentinel_user(): return User.objects.get_or_create(username='deleted')[0] class MyModel(models.Model): user = models.ForeignKey(User, on_delete=models.SET(get_sentinel_user))
-
- DO_NOTHING
-
Ничего не делать. Если используемый тип базы данных следит за целостностью связей, будет вызвано исключение IntegrityError, за исключением, когда вы самостоятельно добавите SQL правило ON DELETE для поля таблицы (возможно используя загрузочный sql).
Вот такие будут результаты:
Комментариев 0