2011-05-13 9 views
5

que tienen una forma similar a la siguiente:formas de Django: cambio de atributo de formfield dinámicamente

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 

Dependiendo del valor del proyecto, quiero cambiar los atributos (obligatorio) de algunos de los campos, los cuales era lo que estaba en el método init.

Sin embargo, me encontré con el siguiente mensaje:

'ConsentFormTpl' object has no attribute 'acknowledge' 

Cualquiera sabe por qué?

Respuesta

17

Los campos no están disponibles como atributos en la instancia del formulario. Están disponibles como elementos de diccionario en self.fields. Entonces:

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

y así sucesivamente.

+0

bah, respuesta precisa. gracias. – goh

Cuestiones relacionadas