Django不存在的最佳实践

3

关于这个问题有一些问题,但没有一个明确的答案。如何处理类似这样的情况:

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

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

是否可以将整个内容放在 try/catch 中并根据找不到的内容返回自定义响应? 如果我们要查找多个内容,这似乎很繁琐。


如在副本中所解释的那样,如果它不存在,那就取决于你想做什么。 - Sayse
1个回答

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

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


^^^质量简明易懂的解释。A+。 - Ian Price

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接