Django exists()与DoesNotExist
问题描述:
我对django exists()
和DoesNotExist
有一些疑问。Django exists()与DoesNotExist
示例代码:
id = 1
# first
if User.objects.get(pk=id).exists():
# my logic
pass
# second
try:
User.objects.get(pk=id)
# my logic
pass
except User.DoesNotExist:
return 0
我经常使用get()
方法。哪种做法更好?哪个代码更好?第一或第二?
答
如果User.objects.get(PK = ID).exists()
这是行不通的,所以这个问题很容易回答:这种方式是逊色于哪种方式做工作:-)
我想你实际上没有做出Minimal Complete Verifiable Example,所以当你发布未经验证的代码时错过了错误。
所以不是,我想你问的区别:
QuerySet.exists()
,当你有一个QuerySet(例如从过滤器操作)。Model.objects.get(…)
并捕获Model.DoesNotExist
exception(或者,如果您想更通用一些,请输入父类型ObjectDoesNotExist
)。
的区别是:
的
QuerySet.exists
方法是在查询集,这意味着你问它有关的查询,而你(“有没有任何实例匹配这个查询?”)还没有试图检索任何特定的实例。实际尝试检索一个实例并且它不存在时,将引发该模型的
DoesNotExist
异常。
使用哪一个正确表达你的意图。
可能的复制[什么是更有效的.objects.filter()存在()或get()和一试(HTTP://计算器。 com/questions/23562784/what-is-more-efficient-objects-filter-exists-or-get-and-a-try) – AKS
'get(pk = id).exists()'_doesn't work_。如果它不存在,那么get()将抛出异常。 exists()仅适用于querysets,get()返回一个不是queryset的实例。 – RemcoGerlich
哦对不起存在()是queryset方法。谢谢 –