Как удалить данные дочерней модели в случае on_delete=models.PROTECT?
Предположим, у меня есть две модели Meeting
и Call_Type
и между ними существует отношение ForeignKey, как показано ниже.
class Meeting(SoftDeleteModel):
name = models.call_type(CallType, on_delete=models.PROTECT, null=True)
И:-
class CallType(models.Model):
type = models.CharField(max_length=256, null=False, blank=False, unique=True)
Теперь я по ошибке удалил данные из таблицы meeting с помощью Meeting.objects.all().delete()
, и при попытке удалить данные модели CallType я получаю следующую ошибку:-
ProtectedError: ("Cannot delete some instances of model 'CallType' because they are referenced through protected foreign keys: 'Meeting.call_type'.", {<Meeting: Meeting object (1)>, <Meeting: Meeting object (2)>, <Meeting: Meeting object (3)>, <Meeting: Meeting object (4)>, <Meeting: Meeting object (5)>, <Meeting: Meeting object (6)>, <Meeting: Meeting object (7)>, <Meeting: Meeting object (8)>, <Meeting: Meeting object (9)>, <Meeting: Meeting object (10)>, <Meeting: Meeting object (11)>, <Meeting: Meeting object (12)>})
Есть ли способ удалить данные модели CallType.
Заранее спасибо. Надеюсь получить от вас ответ в ближайшее время.
Поскольку ссылка на внешний ключ является защищенной, необходимо сначала удалить объекты, ссылающиеся на этот объект:
calltype_to_delete = CallType.objects.get(pk=<some_calltype_pk>)
Meeting.objects.filter(name=calltype_to_delete).delete()
или, если вы хотите сохранить данные о собрании, вы можете установить их внешние ключи в None
, поскольку вы разрешили это, используя null=True
:
calltype_to_delete = CallType.objects.get(pk=<some_calltype_pk>)
Meeting.objects.filter(name=calltype_to_delete).update(name=None)
<<<Только после этого можно удалить объект : CallType
calltype_to_delete.delete()