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() 方法。哪种做法更好?哪个代码更好?第一还是第二?

原文由 Dato Gachechiladze 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
1 个回答

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

这行不通,所以这个问题很容易回答:这种方式不如有效的方式:-)

我猜你实际上没有制作 最小完整可验证示例,因此在发布未经验证的代码时错过了错误。


因此,相反,我想您是在询问以下两者之间的区别:

例如:

   if User.objects.filter(pk=id).exists():
      # ... do the things that need that user to exist

例如:

   try:
      user = User.objects.get(pk=id)
  except User.DoesNotExist:
      # ... handle the case of that user not existing

区别在于:

  • QuerySet.exists 方法在查询集上,这意味着您向它询问查询(“是否有与该查询匹配 实例?”),并且您尚未尝试检索任何特定实例。

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

使用任何一个正确表达你的意图。

原文由 bignose 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏