Django exists()与DoesNotExist

Dat*_*dze 16 python django web

我有一些关于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
Run Code Online (Sandbox Code Playgroud)

我经常使用get()方法.哪种做法更好?哪个代码更好?第一个还是第二个?

big*_*ose 23

if User.objects.get(pk=id).exists()

这不起作用,所以问题很容易回答:这种方式不如工作的方式:-)

我猜你实际上没有制作一个Minimal Complete Verifiable Example,因此当你发布未经验证的代码时错过了错误.


所以相反,我想你问的是:

不同之处是:

  • QuerySet.exists方法在一个查询集上,这意味着你问它一个查询("有没有匹配这个查询的实例?"),你还没有尝试检索任何特定的实例.

  • DoesNotExist当您实际尝试检索一个实例时,会引发模型的异常,但它不存在.

使用正确表达您的意图的任何一个.