对此有一些问题,但没有一个有明确的答案。什么是处理类似事情的最佳方式:
user = Users.objects.get(id=1)
post = Posts.objects.get(id=1)
是否要使用Users.objects.filter()[0]
并检查无?
是否在try / catch中包围整个内容并返回自定义响应,具体取决于找不到的内容?如果我们查找超过1-2件事情,这似乎很乏味。
答案 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
您选择哪种方法在很大程度上取决于您的具体用例。