В Django, я могу исключить поле в подклассе ModelForm? - PullRequest
1 голос
/ 27 сентября 2011

У меня есть «универсальный» InternForm, который наследуется от ModelForm и определяет общие сообщения, виджеты и т. Д.

Я определил подкласс под названием ApplyInternForm для формы заявки, которая доступна каждому, и я хочу скрыть некоторые из «расширенных» полей.

Как переопределить настройку exclude в подклассе формы?

class InternForm(ModelForm):

    # ...

    class Meta:
        model = Intern
        exclude = ()

class ApplyInternForm(InternForm):
    def __init__(self, *args, **kwargs):
        super(ApplyInternForm, self).__init__(*args, **kwargs)
        self.Meta.exclude = ('is_active',)  # this doesn't work

Ответы [ 3 ]

3 голосов
/ 27 сентября 2011

Определение класса Meta в подклассе сработало для меня:

class InternForm(ModelForm):

    # ...

    class Meta:
        model = Intern

class ApplyInternForm(InternForm):

    class Meta:
        model = Intern
        exclude = ('is_active',)
1 голос
/ 27 сентября 2011

Не таким образом, нет. Когда вы создаете подкласс формы, поля, которые вы хотите исключить, уже есть. Однако вы можете удалить их из self.fields после вызова super() в вашем __init__().

0 голосов
/ 27 сентября 2011

Вы можете изменить виджет на скрытый:

class ApplyInternForm(InternForm):
    class Meta:
        widgets = {
            'is_active': forms.HiddenInput(required=False),
        }
...