我有一个模型,在几个模型中设置为外键。现在从模型中删除任何对象时,如果该对象在这些模型中被引用,则会抛出ProtectedError。我想让用户在一次操作中删除包含所有受保护对象的对象。
我只需调用
....
except ProtectedError as e
e.protected_objects.delete()
....
但是当protected\u对象
有自己的受保护对象时,操作失败并抛出另一层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.'})
似乎您可能不想使用on_delete=模型。保护外键的定义。您是否考虑过将删除时更改为使用
CASCADE
?如果使用级联,则不需要迭代依赖项即可首先删除它们。
而不是:
class OtherModel(models.Model):
link = models.ForeignKey("Link", on_delete=models.PROTECT)
您可以像这样定义模型:
class OtherModel(models.Model):
link = models.ForeignKey("Link", on_delete=models.CASCADE)
从管理员中删除使用
CASCADE
的模型时,将显示一个中间页面,其中列出所有也将被删除的从属对象。
一般来说,您可以使用循环:
...
except ProtectedError as e:
obj = e.protected_objects
while True:
try:
obj.delete()
except ProtectedError as e:
obj = e.protected_objects
else:
break
...
要记录发生错误的层,可以添加计数器:
from itertools import count
obj_list = model.objects.filter(pk__in=pk_list)
for layer in count():
try:
log_deletion(request, obj_list, message='Record Deleted in layer {}'.format(layer))
obj_list.delete()
except ProtectedError as e:
obj_list = e.protected_objects
else:
if layer == 0:
return JsonResponse({'success': True, 'status_message': '{0} record(s) has been deleted successfully.'.format(len(pk_list))})
else:
return JsonResponse({'success': False, 'status_message': 'This operation cannot be executed. One or more objects are in use.'})
我正在使用ElasticSearch5.4,试图从嵌套数据类型中删除一个元素。 我有以下映射: 我在《邮递员》中尝试过以下内容: localhost:9200/asset/bookmark/20976/_update?pretty 但我得到以下错误: 我在StackOverflow[1][2]的几个不同问题中遵循了这些建议,但没有成功。 嵌套对象是有效的,因为我已经用数据填充了它。此外,值也是有效
null 当然有更好的方法吗?
根据给定的数据结构(json文件),我基本上需要呈现一个表。不应呈现空的行和/或列。我对JavaScript相当陌生,并尝试了不同的方法(转换为数组并使用.map()、reduce()。过滤器()和lodash等)没有成功。我甚至不知道解决这个问题的最佳方法是什么。(或者可能的搜索词是什么。) 行键(例如:mo、tu、we、th、fr)和列键(john、hane、doe)都不是已知的,并且可以变化
问题内容: 是否有可能在Java中获得对对象的所有引用。 我需要检查的是对象是否删除了所有的回调订阅。 谢谢 问题答案: 这可以通过JVMTI实现,并且通常由堆分析器完成。但是,它不能在Java内部完成。
问题内容: 是否可以使elasticsearch中的所有嵌套对象自动映射为默认嵌套的类型。而不是对象? 问题答案: 是的,您可以在创建索引时使用以下动态模板来做到这一点: