在Django的/ admin /部分,您可以选择删除项目。
如果任何相关对象与您选择的对象一起被删除,您可以在确认删除之前查看受影响对象的列表。
我可以通过编程方式在我自己的函数中检查这个吗?
我想做点什么
for item in Item.objects.all():
if not deletion_would_also_delete_other_objects(item):
item.delete()
答案 0 :(得分:19)
您可以使用django.db.models.deletion导入收集器来执行此操作吗?
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()
答案 1 :(得分:4)
我建议使用 django admin 中提供的 NestedObjects
实用程序。
from django.contrib.admin.utils import NestedObjects
from django.db import router
using = router.db_for_write(Item._meta.model)
# if you only have one database, just set using = "default"
nested_object = NestedObjects(using)
nested_object.collect([Item])
# If you want to delete multi item, you can use:
# nested_object.collect(Model.objects.filter(type="deleted"))
print(nested_object.nested()