关于这个问题有一些问题,但没有一个明确的答案。如何处理类似这样的情况:
user = Users.objects.get(id=1)
post = Posts.objects.get(id=1)
是否可以使用 Users.objects.filter()[0]
并检查是否为 None?
是否可以将整个内容放在 try/catch 中并根据找不到的内容返回自定义响应? 如果我们要查找多个内容,这似乎很繁琐。
首先,通过索引访问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
选择哪种方法,很大程度上取决于您的具体用例。