to_friend = User.objects.filter(username=friend_q)[0:1]
'friend_q'가 User.username 안에 없다면 ... 오류가 발생합니다. 권장 전략은 무엇입니까? Django 쿼리가 아무 것도 반환하지 않으면 어떻게해야합니까? 그것은 나를 준다 오류
당신이 그것에서 아무것도 할 때 쿼리 객체를 평가하기 위해 노력하고 있기 때문에 당신이to_friend = User.objects.filter(username=friend_q)[0:1]
'friend_q'가 User.username 안에 없다면 ... 오류가 발생합니다. 권장 전략은 무엇입니까? Django 쿼리가 아무 것도 반환하지 않으면 어떻게해야합니까? 그것은 나를 준다 오류
당신이 그것에서 아무것도 할 때 쿼리 객체를 평가하기 위해 노력하고 있기 때문에 당신이friend_q가 데이터베이스에있는 사용자가 아닌 경우 to_friend는 빈 목록과 같습니다.
>>> from django.contrib.auth.models import User
>>> User.objects.filter(username='does-not-exist')
[]
그러나, 특정 항목을 조회하기 위해 GET() 메소드를 사용하는 것이 좋습니다 : 이제 DoesNotExist 예외를 캐치하고 적절한 조치를 취할 수 있습니다
>>> 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, ...
오류를 얻고있는 이유는 감사드립니다. 끝에있는 [0 : 1]은 첫 번째 항목을 빈 목록에서 제거하려고 시도하고 있습니다. 아래와 같이 표현을 나누면, 요소를 빼기 전에 빈리스트를 검사 할 수 있습니다.
to_friends = User.objects.filter(username=friend_q)
if to_friends:
to_friend = to_friends[0]
FWIW는, 사용자 이름은 고유합니다. 그래서 U이
from django.shortcuts import get_object_or_404
to_friend = get_object_or_404(User,username=friend_q)
하는 오류를 방지하려면 사용자가 존재하지 않는 경우 404를 제기하려면
to_friend = User.objects.get(username=friend_q)
를 사용하면 수도뿐만 아니라 수 있습니다, 당신은 단순히에 넣어 수 있습니다 블록을 제외하고 시도, 매우 pythonic. 이것은 일반적인 요구 사항이기 때문에
try:
to_friend = User.objects.get(username=friend_q)
except User.DoesNotExist:
to_friend = None
, 당신은 UserManager에 get_user_or_none
을 정의 고려하고 get_object_or_404 유사 None
반환을 필요로하는 다른 관리자한다. 이것은 장고 코어를 고려한 것이었지만 포함되지 않았습니다. 그 이유는 무엇입니까. 그래도 None
이 필요한 모델의 경우 편리한 4 줄 기능입니다.
"to_friends [0]"은 단일 객체를 산출하지만 op 코드 '[0 : 1]'은 단일 객체가있는 목록을 생성합니다. 꽤 똑같은 것은 아닙니다!) - –
to_friends는 결코 None이 아닙니다. 여전히 결과를 반환하지 않는 쿼리 개체입니다. –
아, 또한 None 개체가 싱글 톤으로 제공되므로 신원 비교를 사용하는 것이 좋습니다. 예 : "to_friends가 None이 아닌 경우 :" –