2011-05-13 38 views
5

Tôi có một hình thức như hình dưới đây:hình thức django: thay đổi thuộc tính của formfield động

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 

Tùy thuộc vào giá trị của dự thảo, tôi muốn thay đổi các thuộc tính (bắt buộc) của một số các lĩnh vực, trong đó là những gì đã được trong phương pháp init.

Tuy nhiên tôi gặp thông báo sau:

'ConsentFormTpl' object has no attribute 'acknowledge' 

Bất cứ ai biết tại sao?

Trả lời

17

Các trường không có sẵn dưới dạng thuộc tính trên cá thể biểu mẫu. Chúng có sẵn dưới dạng các phần tử từ điển trong self.fields. Vì vậy:

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

v.v.

+0

bah, câu trả lời chính xác. cảm ơn bạn. – goh

Các vấn đề liên quan