2011-05-13 5 views
5

Ben aşağıdaki gibi bir şekil vardır:Django formlar: FormField değişimi nitelik dinamik

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 

taslak değerine bağlı olarak, ben alanlar, bazılarının (gerekli) özelliklerini değiştirmek istediğiniz init yöntemindeydi.

'ConsentFormTpl' object has no attribute 'acknowledge' 

Herkes neden biliyor:

Ancak şu mesajı karşılaştı?

cevap

17

Bu formlar, form örneğinde nitelikler olarak kullanılamaz. self.fields'da sözlük öğeleri olarak kullanılabilirler. Bu nedenle:

vb.

+0

Bah, kesin cevap. teşekkür ederim. – goh