Это связано с on_delete=CASCADE
.Это означает, что если объект, на который ссылается ForeignKey
, будет удален, то он также должен удалить и ссылающийся объект.Такое CASCADE
может, таким образом, привести к большому количеству объектов, которые будут удалены, поскольку удаление объектов может фактически инициировать другие удаления и т. Д.
В перечислены несколько параметров.документация :
CASCADE
: удалить ссылающиеся объекты; PROTECT
: не разрешать удалятьпользователь, если есть объекты, которые ссылаются на пользователя; SET_NULL
: установите на NULL
(None
в Python), в этом случае нужно установить null=True
в конструкторе ForeignKey(..)
; SET_DEFAULT
: возвращает ForeignKey
значение default=...
; SET(..)
: установите ForeignKey
на некоторое значение, которое передается конструктору SET(..)
(можно также использовать вызываемый); DO_NOTHING
: здесь мы сохраняем ссылку, но некоторый сервер базы данных не допускает это, поскольку эти проверки проверяют FOREIGN KEY
ограничения.
Таким образом, мы можем, например, использовать SET_NULL
и, таким образом, установить author
до NULL
/ None
в случаемы удаляем автора:
from django.db import models
from django.conf import settings
class Post(models.Model):
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
<b>null=True</b>,
<b>on_delete=models.SET_NULL</b>
)
# ...
Также лучше использовать settings.AUTH_USER_MODEL
, поскольку, если вы позже измените модель User
, это автоматически изменит ссылку на новую модель.