2012-03-28 20 views
1

form.clean呼び出すことはできません、次のスタックトレースを検討してください。Djangoのフォーム:

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' 

(関連するすべてのコードは上記のトレースに示されています)。

私のコードはhttps://docs.djangoproject.com/en/1.4/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-otherの例に従っています。しかし、BaseFormの返品にはcleaned_dataが存在すると思われます。

cleanを呼び出す前に、cleaned_dataを作成するのはユーザーコードの責任であるとは限りません。何がありますか?これはDjangoのバグですか?

django 1.4と1.3.1でエラーが発生します。

答えて

3

cleanを直接呼び出すべきではありません。 form.is_valid()に電話する必要があります。

+0

これは安堵です。 – Marcin

2

私が見る限り、文書ではform.clean()に直接電話することは絶対にありません。ほとんどの時間(いつも?)、form.is_valid()に電話したいと思う。

フードの下でis_valid()を呼び出すとメソッドが呼び出され、cleaned_dataと設定されます。