有条件的查询集在django中不存在异常而不使用try / except

时间:2016-02-17 21:09:01

标签: python django exception-handling django-queryset

我需要使用queryset结果创建一个“if”条件,如下所示:

R"(pattern_here_with_single_escaping_backslashes)"

但是如果查询集不存在,代码永远不会进入条件因为当然会抛出一个django异常,而且,我不确定“is None”在这种情况下是否有效。

我知道解决问题的一种方法是使用try / except来捕获异常,但是我知道是否有另一种方法,所以我可以根据需要使用“if”语句。

提前致谢

1 个答案:

答案 0 :(得分:1)

如果数据库中不存在该对象,则

.get()会引发异常。您可以像这样使用.filter().exists()的组合:

group_child_qs = Groups.objects.filter(subgroup = kwargs["group_id"])
if group_child_qs.exists():
    group = group_child_qs.first() 
    group.logic_delete()
    messages.success(request, "Deleted successfully")
else:
    messages.error(request, "It has elements associated")

编辑:

正如@knbk所提到的,这是一个更优化的解决方案

group = Groups.objects.filter(subgroup = kwargs["group_id"]).first()
if group:
    group.logic_delete()
    messages.success(request, "Deleted successfully")
else:
    messages.error(request, "It has elements associated")