2011-05-13 14 views
5

私は以下のような形式があります:ドラフトの値に応じジャンゴフォーム:フォームフィールドの変化属性を動的

class ConsentFormTpl(forms.Form): 
    title = forms.CharField() 
    message = forms.CharField(widget=EditorWidget,label='Description') 
    acknowledge = forms.BooleanField(label="Require acknowledgement?") 
    deadline = forms.DateField(widget=CalendarTimeWidget,label="Acknowledge By") 
    start_time = forms.DateTimeField(widget=CalendarTimeWidget) 
    end_time = forms.DateTimeField(widget=CalendarTimeWidget) 
    availClass = forms.ModelChoiceField(queryset=SchoolClass.objects.all(),empty_label="Select a class",label='Class') 
    consent = forms.BooleanField() 
    students = forms.ModelMultipleChoiceField(label="",\ 
     queryset=User.objects.filter(groups__name='Students').extra(select={'user_name':"first_name || ' ' || last_name"}), \ 
     widget=FilteredSelectMultiple("Students",is_stacked=False)) 
    where = forms.CharField() 
    form_name = forms.CharField(label='Save as:') 


    def __init__(self,data=None,draft=False): 
     super(ConsentFormTpl,self).__init__(data) 
     self.draft = draft 

     self.acknowledge.required = False 
     self.deadline.required = False 
     self.start_time.required = False 
     self.end_time.required = False 
     self.availClass.required = False 
     self.consent.required = False 
     self.where.required = False 

     if draft: 
      self.title.required = False 
      self.message.required = False 
      self.students.required = False 
      self.form_name.required = True 
     else: 
      self.form_name.required = False 

を、私はいくつかのフィールドの属性(必須)を変更したい、どのinitメソッドにあったものです。

私は次のようなメッセージに遭遇しましたが:

'ConsentFormTpl' object has no attribute 'acknowledge' 

誰もがなぜ知っていますか?

答えて

17

フィールドは、フォームインスタンスの属性として使用できません。彼らはself.fieldsの辞書要素として利用できます。したがって:

self.fields['acknowledge'].required = False 

などです。

+0

バー、正確な答え。ありがとうございました。 – goh

関連する問題