2010-04-08 14 views
20

¿Cómo puedo agregar un campo en la función init del formulario? p.ej. en el siguiente código, quiero agregar un campo de perfil.creación de formulario django en init

class StaffForm(forms.ModelForm): 
    def __init__(self, user, *args, **kwargs): 
     if user.pk == 1: 
      self.fields['profile'] = forms.CharField(max_length=200) 

     super(StaffForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = Staff 

Sé que puedo añadirlo justo debajo de la línea de StaffForm clase .... pero yo quiero que esto sea dinámica en función de lo que el usuario se pasa en lo que no puede hacerlo de esta manera.

Gracias

+3

* Posiblemente duplicados de algunos de ellos: * http://stackoverflow.com/search?q=django+dynamic+form, especialmente http://stackoverflow.com/questions/2390000/dynamic-django- forms-variable-fields y http://stackoverflow.com/questions/2506136/storing-dynamic-fields-in-django-forms –

+0

duplicado: https://stackoverflow.com/questions/22390416/setting-initial-django- form-field-value-in-the-init-method –

Respuesta

33

sólo tiene que cambiar la ronda función init para que se llama súper antes de añadir más campos.

class StaffForm(forms.ModelForm): 
    def __init__(self, user, *args, **kwargs): 
     super(StaffForm, self).__init__(*args, **kwargs) 

     if user.pk == 1: 
      self.fields['profile'] = forms.CharField(max_length=200) 
      self.fields['profile'].initial = 'whatever you want' 
    class Meta: 
     model = Staff 
Cuestiones relacionadas