Параметр on_delete
В этой статье мы поговорим о параметре поля ForeignKey
. Если вы не знаете, что такое ForeignKey
— сперва прочтите эту статью.
Начиная с Django 2ой версии у полей ForeignKey параметр on_delete
стал обязательным. Он говорит, что делать, если удалился связанный объект. Перейдём к примеру, у вас есть блог с постами и пользователями:
from django.db import models
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField()
...
class User(models.Model):
login = models.CharField(max_length=200)
email = models.EmailField()
...
В модели Post
поле author
указан on_delete
. — это инструкция, что делать с постом, если удалится его автор. В данном случае этот параметр выставлен в models.CASCADE
. Если автор поста будет удалён, то вместе с ним из базы удалятся все его посты.
Есть ещё несколько популярных вариантов поведения on_delete
:
models.PROTECT
— запрещает удалять пользователя, пока у него есть посты.models.SET_NULL
— посты останутся в БД даже при удалении автора, но значение в полеauthor
у постов изменится наNone
.models.SET_DEFAULT
— работает какSET_NULL
, но вместоNone
выставляет значение по умолчанию.
Все варианты используются, нет какого-то варианта лучше или хуже. В каждом отдельном случае нужно думать отдельно.
Больше вариантов on_delete
читайте в документации.
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.