2010-04-08 6 views
20

Comment ajouter un champ dans la fonction init de formulaire? par exemple. dans le code ci-dessous je veux ajouter un champ de profil.Création de formulaire django sur 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 

Je sais que je peux l'ajouter juste au-dessous de la StaffForm classe .... ligne mais je veux que ce soit dynamique en fonction de ce que l'utilisateur est passé dans ne peut donc pas faire de cette façon.

Merci

+3

* Peut-être en double de certains d'entre eux: * http://stackoverflow.com/search?q=django+dynamic+form, en particulier http://stackoverflow.com/questions/2390000/dynamic-django- forms-variable-fields et http://stackoverflow.com/questions/2506136/storing-dynamic-fields-in-django-forms –

+0

dupliqué: https://stackoverflow.com/questions/22390416/setting-initial-django- form-field-value-in-the-init-méthode –

Répondre

33

juste besoin de changer le cycle de fonction init de sorte que super est appelé avant d'ajouter plus les champs.

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 
Questions connexes