Подтвердить что ты не робот

Создание формы django в init

Как добавить поле в функцию 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

Я знаю, что могу добавить его чуть ниже класса StaffForm...., но я хочу, чтобы это было динамическим в зависимости от того, какой пользователь передан, поэтому не может этого сделать.

Спасибо

4b9b3361

Ответ 1

Просто нужно переключить функцию init вокруг так, чтобы super вызывался перед добавлением больше полей.

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