【问题标题】:Django DoesNotExist Best Practices [duplicate]Django DoesNotExist 最佳实践
【发布时间】:2016-04-30 08:54:36
【问题描述】:

关于这个问题有几个问题,但没有一个有明确的答案。处理以下问题的最佳方法是什么:

user = Users.objects.get(id=1)
post = Posts.objects.get(id=1)

是否改为使用Users.objects.filter()[0] 并检查None?

是否将整个事物包含在 try/catch 中并根据未找到的返回自定义响应?如果我们要查找的内容超过 1-2 个,这似乎很乏味。

【问题讨论】:

  • 如重复解释,如果它不存在,这取决于你想做什么

标签: python django


【解决方案1】:

首先,通过索引访问QuerySet中的第一项:

Users.objects.filter()[0]

如果位置 0 处没有对象,将抛出 IndexError,而不是 DoesNotExist 异常。

在检查不存在的对象时,我选择:

try:
    User.objects.get(pk=1)
except User.DoesNotExist:
    # do something else

try:
    Post.objects.get(pk=1)
except Post.DoesNotExist:
    # do something else

但是,你可以这样做:

user = User.objects.filter(pk=1).first()
post = Post.objects.filter(pk=1).first()

if not all([user, post]):
    # do something else

.first() 如果没有找到对象,则返回None。参考:https://docs.djangoproject.com/en/1.9/ref/models/querysets/#first

也可以:

user = get_object_or_404(User, pk=1)

参考:https://docs.djangoproject.com/en/1.9/topics/http/shortcuts/#get-object-or-404

您选择哪种方法很大程度上取决于您的具体用例。

【讨论】:

  • ^^^ 质量简明细分。 A+。
猜你喜欢
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多