2012-03-28 7 views
1

Betrachten Sie das folgende Stacktrace:Django Formen: nicht nennen form.clean

In [3]: f.clean() 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\management\commands\shell.pyc in <module>() 
----> 1 f.clean() 

C:\Users\Marcin\Documents\oneclickcos\oneclickcos\mainapp\incorporate_helpers.pyc in clean(self) 
    569   This checks the relations between fields, ensures consistent state, and exports bits about the state of the form that can be used in subsequent 
validations 
    570   """ 
--> 571   cleaned_data = super(IncorporateForm, self).clean() 
    572   #logger.debug('IncorporationForm.cleaned_data: ' + str(cleaned_data)) 

    573   try: 

C:\Users\Marcin\Documents\oneclickcos\oneclickcos\mainapp\incorporate_helpers.pyc in clean(self) 
    402 
    403  def clean(self): 
--> 404   cleaned_data = super(CreateForm, self).clean() 
    405   # trying to use an empty pk can result in a ValueError. Easier to expunge. 

    406   if cleaned_data.get('pk', None) == '': del cleaned_data['pk'] 

C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\forms\forms.pyc in clean(self) 
    315   association with the field named '__all__'. 
    316   """ 
--> 317   return self.cleaned_data 
    318 
    319  def has_changed(self): 

AttributeError: 'IncorporateForm' object has no attribute 'cleaned_data' 

(Alle relevanten Code wird in der Spur siehe oben).

Mein Code entspricht den Beispielen unter https://docs.djangoproject.com/en/1.4/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other; es scheint jedoch, dass BaseForm erwartet, dass cleaned_data vorhanden ist.

Nirgendwo in der Dokumentation sehe ich, dass es in der Verantwortung des Benutzercodes ist, cleaned_data vor dem Aufruf clean zu erstellen. Was gibt? Ist das ein Fehler in Django?

Fehler erscheint mit Django 1.4 und 1.3.1.

Antwort

3

Sie sollten clean nicht direkt anrufen. Sie sollten form.is_valid() anrufen.

+0

Nun, das ist eine Erleichterung. – Marcin

2

Soweit ich sehen kann, schlagen die Dokumente nie vor, dass Sie form.clean() direkt anrufen. Die meiste Zeit (die ganze Zeit?), Möchten Sie form.is_valid() anrufen.

Unter der Haube führt der Aufruf is_valid() zur Methode , die cleaned_data setzt.

Verwandte Themen