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 क्वेरी कोई नहीं लौटाता है तो क्या करें? यह मुझे त्रुटि
धन्यवाद
यदि दोस्त_क्यू डेटाबेस में मौजूद कोई उपयोगकर्ता नहीं है, तो to_friend एक खाली सूची के बराबर होगा।
>>> from django.contrib.auth.models import User
>>> User.objects.filter(username='does-not-exist')
[]
हालांकि, यह एक विशिष्ट प्रविष्टि देखने के लिए प्राप्त() विधि उपयोग करना बेहतर है:
>>> 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.
अब आप DoesNotExist अपवाद को पकड़ने तथा उचित कार्रवाई कर सकते हैं।
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, प्रयोक्ता नाम अद्वितीय है। तो यू उपयोग कर सकते हैं
to_friend = User.objects.get(username=friend_q)
आप एक 404 को बढ़ाने के लिए जब उपयोगकर्ता मौजूद नहीं है चाहते हैं, आप के रूप में हो सकता है अच्छी तरह से,
from django.shortcuts import get_object_or_404
to_friend = get_object_or_404(User,username=friend_q)
त्रुटि से बचने के लिए, आप बस इसे में डाल सकता है ब्लॉक को छोड़कर कोशिश करें, बहुत पाइथनिक।
try:
to_friend = User.objects.get(username=friend_q)
except User.DoesNotExist:
to_friend = None
के बाद से यह एक आम आवश्यकता है, तो आप UserManager पर get_user_or_none
को परिभाषित करने पर विचार करना चाहिए, और अन्य प्रबंधकों कि None
वापसी, get_object_or_404 के लिए इसी तरह की आवश्यकता होगी। यह django कोर के लिए विचार में था, लेकिन क्या कारण के लिए, शामिल नहीं किया गया था। फिर भी, उन मॉडलों के लिए एक आसान, 4 लाइन फ़ंक्शन है, जिन्हें None
वापस चाहिए।
"to_friends [0]" एक वस्तु उत्पन्न करेगा, जबकि ओप का कोड '[0: 1]' इसमें एक वस्तु के साथ एक सूची उत्पन्न करता है। काफी वही बात नहीं है! -) –
to_friends कभी भी नहीं होंगे - यह अभी भी एक क्वेरी ऑब्जेक्ट होगा जो कोई परिणाम नहीं देता है। –
ओह, और भी, कोई भी वस्तु एक सिंगलटन होने के लिए की गारंटी है, तो आप पहचान तुलना यानी उपयोग करते हुए, बेहतर होगा: "अगर to_friends कोई भी नहीं है:" –