2013-08-22 9 views
10

मेरे पास मॉडलफॉर्म पर क्लीन विधि से संबंधित दो प्रश्न हैं।मॉडलफॉर्म: साफ विधि ओवरराइड

class AddProfileForm(ModelForm): 
     ... 
     password = forms.CharField(max_length=30,widget=forms.PasswordInput(attrs={'class':'form2'})) 
     password_verify = forms.CharField(max_length=30,widget=forms.PasswordInput(attrs={'class':'form2'}), label='Retype password') 
     ... 

     class Meta: 
      model = UserModel 
      fields=("username", "password", "password_verify", "first_name", "last_name", "date_of_birth", "biography", "contacts",) 

     #called on validation of the form 
     def clean(self): 
      #run the standard clean method first 
      cleaned_data=super(AddProfileForm, self).clean() 
      password = cleaned_data.get("password") 
      password_verify = cleaned_data.get("password_verify") 

      #check if passwords are entered and match 
      if password and password_verify and password==password_verify: 
       print "pwd ok" 
      else: 
       raise forms.ValidationError("Passwords do not match!") 

      #always return the cleaned data 
      return cleaned_data 
  1. मैं हमेशा मानक साफ विधि बुलाना चाहिए: यहाँ मेरी उदाहरण है?

    cleaned_data=super(AddProfileForm, self).clean() 
    
  2. क्या मुझे हमेशा cleaned_data चर वापस करना चाहिए?

    return cleaned_data 
    

उत्तर

13

1 के लिए, हाँ, यदि आप माता पिता वर्ग के सत्यापनकर्ता के उपयोग करना चाहते हैं। doc पर यह स्पष्टीकरण देखें। महीने | | साल

चेतावनी

ModelForm.clean() प्रणाली झंडा मॉडल सत्यापन कदम है कि के रूप में, अद्वितीय unique_together या unique_for_date चिह्नित कर रहे हैं मॉडल क्षेत्रों की विशिष्टता को मान्य करता है कि निर्धारित करता है।

यदि आप स्वच्छ() विधि को ओवरराइड करना चाहते हैं और सत्यापन को बनाए रखना चाहते हैं, तो आपको मूल वर्ग की क्लीन() विधि को कॉल करना होगा।

2, हाँ, यदि डेटा ठीक से मान्य करता है। अन्यथा सत्यापन त्रुटि उठाओ।

+0

1/इसलिए यदि मैं अभिभावक वर्ग की क्लीन विधि को कॉल नहीं करता हूं, तो अन्य फ़ील्ड मान्य नहीं होंगे? यह किस मामले में उपयोगी होना चाहिए? (फ़ील्ड हमेशा मान्य होना चाहिए, है ना?) 2/मेरी साफ विधि में, एक सत्यापन त्रुटि हो सकती है लेकिन मैं वैसे भी cleaned_data वापस आती है! क्या यह गलत तरीका है? – rom

+1

@rom, फ़ील्ड्स को अपने 'field_clean()' विधि में मान्य किया गया है। 'स्वच्छ()' विधि किसी भी संयोजन या एकाधिक फ़ील्ड को एक दूसरे से संबंधित मूल्यों के साथ मान्य करना है। – Rohan

+0

ठीक है तो अगर मैं सुपर (AddProfileForm, self) हटा देता हूं .clean() यह अभी भी काम करता है, नहीं? या यह अनन्य बाधाओं की जांच नहीं करेगा (उदाहरण के लिए)? – rom

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