2009-10-09 5 views

उत्तर

9

यदि दोस्त_क्यू डेटाबेस में मौजूद कोई उपयोगकर्ता नहीं है, तो 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

कारण आपको कोई त्रुटि हो रही है इसलिए है क्योंकि आप जब उसमें कुछ भी नहीं है क्वेरी वस्तु का मूल्यांकन करने की कोशिश कर रहे हैं। अंत में [0: 1] एक खाली सूची से पहले आइटम को लेने का प्रयास कर रहा है। यदि आप नीचे की तरह अभिव्यक्ति को विभाजित करते हैं, तो आप इससे तत्व निकालने से पहले एक खाली सूची की जांच कर सकते हैं।

to_friends = User.objects.filter(username=friend_q) 
if to_friends: 
    to_friend = to_friends[0] 
+0

"to_friends [0]" एक वस्तु उत्पन्न करेगा, जबकि ओप का कोड '[0: 1]' इसमें एक वस्तु के साथ एक सूची उत्पन्न करता है। काफी वही बात नहीं है! -) –

+0

to_friends कभी भी नहीं होंगे - यह अभी भी एक क्वेरी ऑब्जेक्ट होगा जो कोई परिणाम नहीं देता है। –

+0

ओह, और भी, कोई भी वस्तु एक सिंगलटन होने के लिए की गारंटी है, तो आप पहचान तुलना यानी उपयोग करते हुए, बेहतर होगा: "अगर to_friends कोई भी नहीं है:" –

5
  1. Fwiw, प्रयोक्ता नाम अद्वितीय है। तो यू उपयोग कर सकते हैं

    to_friend = User.objects.get(username=friend_q) 
    
  2. आप एक 404 को बढ़ाने के लिए जब उपयोगकर्ता मौजूद नहीं है चाहते हैं, आप के रूप में हो सकता है अच्छी तरह से,

    from django.shortcuts import get_object_or_404 
    to_friend = get_object_or_404(User,username=friend_q) 
    
  3. त्रुटि से बचने के लिए, आप बस इसे में डाल सकता है ब्लॉक को छोड़कर कोशिश करें, बहुत पाइथनिक।

    try: 
        to_friend = User.objects.get(username=friend_q) 
    except User.DoesNotExist: 
        to_friend = None 
    
  4. के बाद से यह एक आम आवश्यकता है, तो आप UserManager पर get_user_or_none को परिभाषित करने पर विचार करना चाहिए, और अन्य प्रबंधकों कि None वापसी, get_object_or_404 के लिए इसी तरह की आवश्यकता होगी। यह django कोर के लिए विचार में था, लेकिन क्या कारण के लिए, शामिल नहीं किया गया था। फिर भी, उन मॉडलों के लिए एक आसान, 4 लाइन फ़ंक्शन है, जिन्हें None वापस चाहिए।

संबंधित मुद्दे