Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当Django查询返回none时该怎么办?这给了我错误_Python_Django - Fatal编程技术网

Python 当Django查询返回none时该怎么办?这给了我错误

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

如果“friend_q”不在User.username中,它将给出错误消息。 推荐的策略是什么


谢谢

出现错误的原因是您试图在查询对象中没有任何内容时对其求值。结尾处的[0:1]正在尝试从空列表中取出第一项。如果像下面这样拆分表达式,可以在从中提取元素之前检查空列表

to_friend = User.objects.filter(username=friend_q)[0:1]
  • FWIW,用户名是唯一的。所以你可以用

    to_friends = User.objects.filter(username=friend_q)
    if to_friends:
        to_friend = to_friends[0]
    
  • 如果你想在用户不存在时提出404,你也可以

    to_friend = User.objects.get(username=friend_q)
    
  • 为了防止错误,您可以简单地将它放在try-except块中,非常类似python

    from django.shortcuts import get_object_or_404
    to_friend = get_object_or_404(User,username=friend_q)
    
  • <> LI>

    因为这是一个常见的要求,您应该考虑在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()