Python 当Django查询返回none时该怎么办?这给了我错误
如果“friend_q”不在User.username中,它将给出错误消息。 推荐的策略是什么Python 当Django查询返回none时该怎么办?这给了我错误,python,django,Python,Django,如果“friend_q”不在User.username中,它将给出错误消息。 推荐的策略是什么 谢谢出现错误的原因是您试图在查询对象中没有任何内容时对其求值。结尾处的[0:1]正在尝试从空列表中取出第一项。如果像下面这样拆分表达式,可以在从中提取元素之前检查空列表 to_friend = User.objects.filter(username=friend_q)[0:1] FWIW,用户名是唯一的。所以你可以用 to_friends = User.objects.filter(usernam
谢谢出现错误的原因是您试图在查询对象中没有任何内容时对其求值。结尾处的[0:1]正在尝试从空列表中取出第一项。如果像下面这样拆分表达式,可以在从中提取元素之前检查空列表
to_friend = User.objects.filter(username=friend_q)[0:1]
to_friends = User.objects.filter(username=friend_q)
if to_friends:
to_friend = to_friends[0]
to_friend = User.objects.get(username=friend_q)
from django.shortcuts import get_object_or_404
to_friend = get_object_or_404(User,username=friend_q)
因为这是一个常见的要求,您应该考虑在USER管理器上定义<代码> GETIOSURIORIORNONO//>,以及其他需要“代码>没有< /Calp>Read”的管理器,类似于GETXObjutoToRo.404。django core考虑了这一点,但无论出于何种原因,都没有包括在内。不过,对于需要
None
返回的机型,它还是一个方便的4行函数
如果friend_q不是数据库中的用户,则to_friend将等于空列表
try:
to_friend = User.objects.get(username=friend_q)
except User.DoesNotExist:
to_friend = None
但是,最好使用get()方法查找特定条目:
>>> from django.contrib.auth.models import User
>>> User.objects.filter(username='does-not-exist')
[]
如果没有用户名为friend_q的用户,您将获得to_friend=None,如果有,您将获得用户“to_friends[0]”将生成一个对象,而op的代码“[0:1]”将生成一个包含单个对象的列表。不完全一样to_friends永远不会是None-它仍然是一个不返回任何结果的查询对象。哦,而且None对象被保证为singleton,因此您最好使用身份比较,即:“如果to_friends不是None:”
>>> User.objects.get(username='does-exist')
<User: does-exist>
>>> User.objects.get(username='does-not-exist')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.5/django/db/models/manager.py", line 120, in get
File "/usr/lib/python2.5/django/db/models/query.py", line 305, in get
DoesNotExist: User matching query does not exist.
try:
to_friend = User.objects.get(username=friend_q)
except User.DoesNotExist:
# do something, raise error, ...
to_friend = User.objects.filter(username=friend_q).first()