2012-01-30 11 views
0

を無視しているI次のフォームのコードを持っている:私は初期値を使用してDisplaySharerFormを作成しようとするとform.cleaned_dataが初期値

ここ
class DisplaySharerForm(forms.Form): 
    ORDER_BY_CHOICES = (
     ('customer_sharer_identifier', 'customer_sharer_identifier'), 
     ('action_count', 'action_count'), 
     ('redirect_link', 'redirect_link'), 
     ('enabled', 'enabled'), 
     ('click_total', 'click_total') 
    ) 

    DIRECTION = (
     ('DESC','DESC'), 
     ('ASC', 'ASC') 
    ) 

    #These are the sorting options. By default it's set to order by the customer_sharer_identifiers, descending, beginning at page 1. 
    order_by = forms.ChoiceField(choices=ORDER_BY_CHOICES, required=False,initial='customer_sharer_identifier') 
    direction = forms.ChoiceField(choices=DIRECTION, required=False,initial='DESC') 
    action_type_id = forms.IntegerField(required=False) 
    page_number = forms.IntegerField(required=False,initial=1) 

は私が得るものです:

>>> f = DisplaySharerForm({}) 
>>> f.is_valid() 
True 
>>> f.cleaned_data 
{'action_type_id': None, 'direction': u'', 'page_number': None, 'order_by': u'', 'customer_sharer_identifier': None} 

なぜISN」 t cleaned_dataは私が提供した初期値に設定されていますが、それを修正するために何ができますか?

答えて

5

cleaned_dataは、フォームにバインドされたデータのクリーンアップされた値を返します。この場合、フォームにバインドして辞書を空にします。 initial_dataは、初期フォームの表示および変更された値の表示に使用されます。カスタムクリーン機能でこれを「修正」できます:

class DisplaySharerForm(forms.Form): 
... 
    def clean(self): 
     cleaned_data = super(DisplaySharerForm, self).clean() 
     for key, value in cleaned_data.items(): 
      if not value and key in self.initial: 
       cleaned_data[key] = self.initial[key] 
     return cleaned_data