Django DoesNotExist最佳实践

时间:2016-01-23 21:24:39

标签: python django

对此有一些问题,但没有一个有明确的答案。什么是处理类似事情的最佳方式:

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

是否要使用Users.objects.filter()[0]并检查无?

是否在try / catch中包围整个内容并返回自定义响应,具体取决于找不到的内容?如果我们查找超过1-2件事情,这似乎很乏味。

1 个答案:

答案 0 :(得分:6)

首先,通过索引访问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

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