微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我们可以使用 queryset.first() 而不是捕获异常吗?

如何解决我们可以使用 queryset.first() 而不是捕获异常吗?

当我不能完全确定是否有任何带有 MyModel.objects.filter(pk=1).first() 的对象时,我通常使用 MyModel.objects.get(pk=1) 而不是 pk=1

在这种情况下这样做是不好的做法还是我需要

try:
  MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
  print('not found')

我通常使用 MyModel.objects.filter(pk=1).first() 来减少代码

解决方法

这没什么不对。如果对象不存在,您会得到 None。与使用 .exists()

相比,它可以节省使用多个查询访问数据库的时间

我会在没有评论的情况下将以下内容称为自我记录,但如果您认为不是,请发表评论

obj = MyModel.objects.filter(pk=1).first() 
if obj is None:
    # no such object exists...
    ...
else
    # process obj
    ...

我刚刚想到,如果您使用的是最新的 Python,这是“海象”运算符的用途

if obj := MyModel.objects.filter(pk=1).first() is None:

但不确定我更喜欢它!

,

您可以使用 django 内置方法 get_object_or_404 如果对象不退出将返回 404 页面

from django.shortcuts import render,get_object_or_404

obj = get_object_or_404(MyModel,id=pk)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。