2013-08-22 11 views
10

Ich habe zwei Fragen bezüglich der sauberen Methode auf einer Modellform. Hier ist mein Beispiel:modelform: überschreiben saubere Methode

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. Soll ich immer den Standard saubere Methode aufrufen?

    cleaned_data=super(AddProfileForm, self).clean() 
    
  2. Sollte ich immer die cleaned_data Variable zurückgeben?

    return cleaned_data 
    

Antwort

13

Für 1, Ja, wenn Sie die Verwendung von Elternklasse der Validierer machen wollen. Siehe diese Erklärung auf der doc.

Die ModelForm.clean() -Methode Warnung setzt ein Flag, dass das Modell Validierungsschritt validiert die Einzigartigkeit der Modellfelder macht die als einzigartig gekennzeichnet sind, unique_together oder unique_for_date | Monat | Jahr.

Wenn Sie die clean() -Methode überschreiben und diese Validierung beibehalten möchten, müssen Sie die clean() -Methode der Elternklasse aufrufen.

Für 2, ja, wenn Daten richtig validiert. Andernfalls wird der Validierungsfehler ausgelöst.

+0

1/Wenn ich also die clean-Methode der Elternklasse nicht anrufe, werden die anderen Felder nicht validiert? In welchem ​​Fall sollte das nützlich sein? (Felder müssen immer validiert werden, oder?) 2/In meiner sauberen Methode kann es einen Validierungsfehler geben, aber ich gebe cleaned_data trotzdem zurück! Ist es ein falscher Weg? – rom

+1

@rom, Felder werden in ihrer eigenen 'field_clean()' Methode validiert. Mit der 'clean()' Methode validieren Sie jede Kombination oder mehrere Felder mit Werten, die miteinander in Beziehung stehen. – Rohan

+0

Ok also, wenn ich Super entfernen (AddProfileForm, self) .clean() funktioniert es immer noch, nein? Oder es prüft nicht die Einschränkungen von unique_together (zum Beispiel)? – rom