Django позволяет вам установить атрибут on_delete
в связанном поле, чтобы вы могли указать, что должно произойти при удалении связанного объекта.
Когда объект, на который ссылается ForeignKey
, будет удален, Django будет эмулировать поведение ограничения SQL, заданного аргументом on_delete
.
В зависимости от того, что вы сказали , вы хотите использовать функциональность SET()
, которая вызывает функцию для установки значения при удалении связанного объекта.
Пример взят из Django docs;
Установите для ForeignKey
значение, переданное в SET()
, или, если передано вызываемое, результат его вызова. В большинстве случаев передача вызываемого будет необходима, чтобы избежать выполнения запросов во время импорта models.py
:
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import models
def get_sentinel_user():
return get_user_model().objects.get_or_create(username='deleted')[0]
class MyModel(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET(get_sentinel_user),
)
В этом примере будет удален шаблон c " user ", который будет ссылкой на все объекты, где удален их пользователь.
Поскольку вы работаете с FK, вам необходимо установить значение для объекта этой связанной таблицы для выполнения базы данных. ограничение, но я уверен, что вы могли бы сделать что-то подобное, чтобы добиться того, что вы хотите.