【发布时间】:2019-03-28 08:51:05
【问题描述】:
我有一个模型在几个模型中设置为外键。现在从模型中删除任何对象都会抛出 ProtectedError 如果它在任何这些模型中被引用。我想让用户在一次操作中删除所有受保护对象的对象。
我可以通过调用删除第一层保护对象
....
except ProtectedError as e
e.protected_objects.delete()
....
但是当protected_objects拥有自己的受保护对象时,操作失败并抛出另一个第二层ProtectedError。我想要实现的是,删除所有受保护的对象,不加区别地存在于哪一层。我知道执行这可能是一项危险的操作。但是我可以在没有复杂解决方案的情况下实现这一目标吗?提前致谢。
源代码,我正在尝试执行ajax操作:
try:
obj_list = model.objects.filter(pk__in=pk_list)
log_deletion(request, obj_list, message='Record Deleted')
obj_list.delete()
return JsonResponse({'success': True, 'status_message': '{0} record(s) has been deleted successfully.'.format(len(pk_list))})
except ProtectedError as e:
e.protected_objects.delete()
return JsonResponse({'success': False, 'status_message': 'This operation cannot be executed. One or more objects are in use.'})
【问题讨论】:
-
你可以使用循环吗?
-
你能明确显示
...吗? -
@MadPhysicist 我已经添加了源代码。循环可以是一个解决方案,但我需要显示与对象相关的所有层中的所有受保护对象。这可能吗?
-
是否有任何东西阻止您在每次迭代中记录?
标签: python django postgresql