Django ORM: ForeignKey=self и on_delete=PROTECT

У меня есть модель с полем, где я вижу следующее поле:

some_field = ForeignKey('self', on_delete=PROTECT, blank=true, null=true, editable=false)

Для чего существует это поле и что оно делает? Также я не могуt delete obj of this model id adminpanel, cause it say " you can удалить obj A, потому что это потребует удаления следующего защищенного obj: obj A"

Причина этого в этом некотором_поле?

Вы не можете удалить это поле/объект в панели администратора, так как это внешний ключ. И данные могут быть связаны с ним в другой таблице. Поэтому, чтобы удалить этот объект, вам нужно удалить все связанные объекты, имеющиеся в таблице, с которой связан этот внешний ключ. Подробнее о связях можно прочитать здесь

https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_one/

Если объект, который вы удаляете, ссылается через отношения внешнего ключа, Django не позволит вам удалить его, потому что вы установили: on_delete=PROTECT.

Если вы хотите разрешить удаление, вам придется удалять и связанные объекты. Если вы хотите такого поведения:

from django.db.models import CASCADE

some_field = ForeignKey('self', on_delete=CASCADE, blank=true, null=true, editable=false)
Вернуться на верх