Удаление связей в Django

Для управления удалением связанных записей необходимо использовать для 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
Нужна авторизация с помощью
Об авторе
Илья Илья

меня можно найти тут