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)