Reputation: 49886
Consider the following stacktrace:
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'
(All relevant code is shown in the trace above).
My code conforms to the examples at https://docs.djangoproject.com/en/1.4/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other; however, it seems that BaseForm returns expects cleaned_data
to exist.
Nowhere in the documentation do I see that it is the responsibility of user code to create cleaned_data
before calling clean
. What gives? Is this a bug in Django?
Error appears with django 1.4 and 1.3.1.
Upvotes: 1
Views: 250
Reputation: 309129
As far as I can see the docs never suggest that you call form.clean()
directly. Most of the time (all the time?), you want to call form.is_valid()
.
Under the hood, calling is_valid()
leads to the full_clean()
method being called, which sets cleaned_data
.
Upvotes: 2
Reputation: 600059
You shouldn't call clean
directly at all. You should call form.is_valid()
.
Upvotes: 3