2009-05-12 29 views
27

मैं Django पकड़ने की कोशिश कर रहा हूँ। मैं ग्रहण पर पाइडेव का उपयोग करता हूं। मैंने एक सरल साइनअप पेज लिखा है जिसे मैं काम नहीं कर सकता। ग्रहण शिकायत करता है कि उपयोगकर्ता। DoesNotExist अपरिभाषित है। सबसे अधिक संभावना है, मैं कुछ तुच्छ याद कर रहा हूँ।Django - User.DoesNotExist मौजूद नहीं है?

from django.contrib.auth.models import User 
... 
class SignUpForm (forms.Form): 
    ... 
    def clean_username (self): 
     try: 
      User.objects.get(username=self.cleaned_data['username']) 
     except User.DoesNotExist: 
      return self.cleaned_data['username'] 
     raise forms.ValidationError(USERNAME_ALREADY_IN_USE) 
    ... 
+12

सवाल खिताब के लिए +1। – OregonGhost

+0

क्या आपने कोड चलाने की कोशिश की है?क्या यह सिर्फ pydev शिकायत है या यह बिल्कुल काम नहीं करता है? – miles82

+0

यह काम करता है, लेकिन जब तक मैं कोड नहीं लेता, यह मुझे pydev पर डीबग नहीं करने देता है। – shanyu

उत्तर

17

समस्या वास्तव में PyDev के साथ है, न कि आपका कोड। आपने जो किया है वह बिल्कुल सही है, लेकिन आईडीई को हमेशा पाइथन जैसे गतिशील भाषा में विशेषताओं को हल करने में कठिनाई होगी। DoNotExist अपवाद के मामले में, इसे सामान्य ऑब्जेक्ट विरासत के बजाय __metaclass__ के माध्यम से जोड़ा जाता है, इसलिए PyDev इसे खोजने में सक्षम होने की संभावना नहीं है। हालांकि, यह निश्चित रूप से काम करना चाहिए।

+1

अंतर्दृष्टि के लिए धन्यवाद। यह काम करता है, हालांकि इस मुद्दे का बहुत दर्दनाक दुष्प्रभाव है: मैं pydev पर डीबग नहीं कर सकता! यह दिलचस्प है कि जब मैं कोड से बाहर भाग लेता हूं, तो मैं निर्बाध रूप से डीबग कर सकता हूं। चींटी सुझाव? – shanyu

+2

सुझाव: डायनामिक भाषाओं के साथ आईडीई का उपयोग न करें। – muhuk

+3

सुझाव: PyCharm –

2

__metaclass__ तों के माध्यम से बनाया क्रम संकल्प गुण ग्रहण कर सकते हैं: यहाँ कोड के संबंधित भाग है?

ध्यान दें कि आपने कभी भी अपने किसी भी मॉडल पर DoesNotExist परिभाषित नहीं किया है और इसे django.db.models.base.Model पर भी परिभाषित नहीं किया गया है।

0

ग्रहण शिकायत करता है कि उपयोगकर्ता। DoesNotExist अपरिभाषित है।

इसका क्या मतलब है? क्या आपके पास पाइथन त्रुटि और स्टैक ट्रेस है? इस कोड को काम करना है (जैसा कि documentation में)। एक ग्रहण मुद्दा की तरह लग रहा है। बस देव सर्वर चलाएं और देखें कि यह काम करता है या नहीं:

manage.py runserver 
7

पायडेव के पास ऐसे मामलों के लिए एक समाधान है (जब सदस्यों को रनटाइम पर परिभाषित किया जाता है)। बस स्ट्रिंग के अंत में # @ अपरिभाषित वैरिएबल जोड़ें जो चेतावनी का कारण बनता है (या कर्सर "DoNotExist" पर कीबोर्ड पर ctrl + 1), और यह शिकायत नहीं करेगा।

19

मुझे पता चला कि पाइडेव वास्तव में इसके लिए एक अच्छा कामकाज है।

जाओ विंडो को>पसंद, तो Pydev>संपादक>कोड विश्लेषण

अपरिभाषित टैब पर क्लिक करके पर विचार वैश्विक के रूप में निम्न नाम शीर्षक पाठ बॉक्स में "DoesNotExist" जोड़ें।

+0

आपको बहुत धन्यवाद - उन लाल squiggly underlines मुझे उम्र के लिए bugging किया गया है :) – Jiaaro

+0

इसके लिए धन्यवाद। मैं ज्यादातर इसे अनदेखा कर रहा था और इसे पायथन बनाम ग्रहण तक ले गया था और एक गतिशील भाषा आदि था। +1 – DrBloodmoney

+1

सेवा की खुशी है :) यहां मेरा पूरा "ग्लोबल्स के रूप में विचार करें" बॉक्स जैसा दिखता है: _, tr, doesNotExist , MultipleObjectsReturned, base_fields, _meta, ऑप्स, आउटबॉक्स – SmileyChris

1

आप इसे एक अलग तरीके से भी हल कर सकते हैं: बस उपयोगकर्ता वर्ग पर जाएं, और डॉकस्ट्रिंग में @DynamicAttrs जोड़ें।
यह पीईडीवी को बताएगा कि कक्षा के गुण गतिशील रूप से जोड़े गए हैं, और यह अब DoNotExist जैसे "मुद्दों" के लिए शिकायत नहीं करेगा।

1

समस्या को हल करने के लिए मुझे वर्चुअलएन्व में उबंटू पर एक ही समस्या है मैंने इस स्निपेट का उपयोग किया है।

http://djangosnippets.org/snippets/191/#c3091

parituclar वह कोड के साथ कस्टम उपयोगकर्ता फ़ील्ड बनाने में:

class UserField(forms.CharField): 
    def clean(self, value): 
     super(UserField, self).clean(value) 
     try: 
      User.objects.get(username=value) 
      raise forms.ValidationError("Someone is already using this username. Please pick an other.") 
     except User.DoesNotExist: 
      return value 
संबंधित मुद्दे