Как проверить, какие объекты будут удалены каскадом в Django?
В разделе /admin/section Django вы можете удалить элементы.
Если любые связанные объекты будут удалены вместе с выбранным вами объектом, вы увидите список затронутых объектов до подтверждения удаления.
Могу ли я проверить это в своей собственной функции программно?
Я хотел бы сделать что-то вроде
for item in Item.objects.all():
if not deletion_would_also_delete_other_objects(item):
item.delete()
Ответы
Ответ 1
Не могли бы вы использовать из django.db.models.deletion import Collector для этого?
from django.db.models.deletion import Collector
from .models import Item
for item in Item.objects.all():
collector = Collector({})
collector.collect([item])
# dependencies should be an empty dict if the item is not related to anything
if not collector.dependencies:
item.delete()