2010-04-08 13 views
20

Come posso aggiungere un campo nella funzione di avvio modulo? per esempio. nel codice qui sotto voglio aggiungere un campo profilo.Creazione modulo django su 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 

So che posso aggiungere è appena al di sotto della classe StaffForm .... linea, ma io voglio che questo sia dinamica a seconda di ciò che l'utente è passato in modo da non può farlo in questo modo.

Grazie

+3

* Forse duplicati di alcuni di essi: * http://stackoverflow.com/search?q=django+dynamic+form, specialmente http://stackoverflow.com/questions/2390000/dynamic-django- moduli-variabili-campi e http://stackoverflow.com/questions/2506136/storing-dynamic-fields-in-django-forms –

+0

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

risposta

33

solo bisogno di cambiare la funzione init turno in modo che super si chiama prima di aggiungere più campi.

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