2011-05-13 29 views
5

我有類似下面的形式:django的形式:formfield的變化屬性動態

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