📝 Django

ForeignKey и on_delete в Django

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
67
🌿
Уровень
Средний
🐦 💼 ✈️

Охватываемые темы: on_delete — поведение при удалении родителя, Варианты on_delete, Примеры, related_name.

on_delete — поведение при удалении родителя

from django.db import models

class Task(models.Model):
    project = models.ForeignKey(
        'Project',
        on_delete=models.CASCADE,  # удалить задачу при удалении проекта
    )

Варианты on_delete

Параметр Поведение
CASCADE Удалить связанные объекты
PROTECT Запретить удаление, если есть связанные
SET_NULL Установить NULL (нужно null=True)
SET_DEFAULT Установить значение по умолчанию
SET(value) Установить конкретное значение
DO_NOTHING Ничего не делать (риск нарушения целостности)

Примеры

# Удалить задачи при удалении проекта
project = models.ForeignKey(Project, on_delete=models.CASCADE)

# Запретить удаление проекта, пока есть задачи
project = models.ForeignKey(Project, on_delete=models.PROTECT)

# Задача без проекта
project = models.ForeignKey(
    Project,
    on_delete=models.SET_NULL,
    null=True,
    blank=True,
)
class Task(models.Model):
    project = models.ForeignKey(
        Project,
        on_delete=models.CASCADE,
        related_name='tasks',  # project.tasks.all()
    )
project = Project.objects.get(pk=1)
tasks = project.tasks.all()        # через related_name
tasks = project.task_set.all()     # по умолчанию (без related_name)

Выбор стратегии

  • CASCADE — когда дочерний объект не имеет смысла без родителя (задача без проекта)
  • PROTECT — когда удаление родителя должно быть осознанным действием
  • SET_NULL — когда связь опциональна (статья без автора)

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 138
📝

Django: Теги шаблонов

Теги шаблонов — это логика внутри HTML. В отличие от {{ переменная }}, которая только...

📅 30.06.2026 👁️ 87
📝

Django: Статические файлы

Статические файлы — CSS, JavaScript, изображения, шрифты. Django обрабатывает их особым образом: в разработке раздаёт...

📅 30.06.2026 👁️ 79

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!