我正在做一个视图来从模型中删除实例(使用 Django 中的通用视图DeleteView),但它会级联并删除其他模型中的实例:
url(r'^person/(?P<pk>\d+)/delete/$', login_required(DeleteView.as_view(model=Person, success_url='/person/', template_name='delete.html')), name='person_delete'),
我想要做的是显示将要删除的相关项目的列表,就像管理界面一样,例如:
Are you sure you are going to delete Person NAMEOFTHEPERSON?
By deleting it, you are also going to delete:
CLASSNAME1: CLASSOBJECT1 ; CLASSNAME2: CLASSOBJECT2 ; CLASSNAME3: CLASSOBJECT3 ; etc
您可以使用Collector https://github.com/django/django/blob/master/django/db/models/deletion.pyDjango 使用类来确定要在级联中删除哪些对象。实例化它然后调用collect
在其上传递您想要删除的对象。它需要一个列表或查询集,因此如果您只有一个对象,只需将其放入列表中:
from django.db.models.deletion import Collector
collector = Collector(using='default') # or specific database
collector.collect([some_instance])
for model, instance in collector.instances_with_model():
# do something
instances_with_model
返回一个生成器,因此您只能在循环上下文中使用它。如果您更喜欢可以操作的实际数据结构,admin
contrib 包有一个Collector
子类称为NestedObjects https://github.com/django/django/blob/master/django/contrib/admin/util.py,其工作方式相同,但有一个nested
返回分层列表的方法:
from django.contrib.admin.utils import NestedObjects
collector = NestedObjects(using='default') # or specific database
collector.collect([some_instance])
to_delete = collector.nested()
更新:从 Django 1.9 开始,django.contrib.admin.util被重命名为django.contrib.admin.utils
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)