Django - изменить виджет поля в подклассе BaseInlineFormSet - PullRequest
1 голос
/ 30 марта 2012

У меня есть форма, которая является подклассом BaseInlineFormSet, и для одного из полей в связанной модели мне нравится менять ее виджет. Вот мой код для формы:

class MyForm(forms.models.BaseInlineFormSet):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)

        self.forms[0].error_css_class = 'error'
        self.forms[0].required_css_class = 'required'

    class Meta:
        model = MyModel

        # here I am trying.
        # recommend is an IntegerField in MyModel, which -
        # I like to make it render in the form as a Radio Select (yes, no)
        widgets = {'recommend': {forms.RadioSelect}}

Любая помощь и вклад приветствуется

Ответы [ 2 ]

10 голосов
/ 30 марта 2012

Встроенный набор форм - это коллекция форм моделей. Класс Meta не принадлежит набору форм, он относится к форме модели.

Обычно вы создаете класс встроенного набора форм, используя метод inlineformset_factory, который может принимать form в качестве аргумента.

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel
        widgets = {'recommend': forms.RadioSelect()}

MyModelFormSet = inlineformset_factory(ParentModel, MyModel, form=MyModelForm)

Если вам нужно создать подкласс BaseInlineFormset, вы также можете указать formset в качестве аргумента inlineformset_factory.

Для получения дополнительной информации см. Документацию inline formset .

4 голосов
/ 16 апреля 2012

Чтобы включить виджет в класс BaseInlineFormSet .......

Переопределите метод add_fields в вашем подклассе:

def add_fields(self, form, index):
    super(MyForm, self).add_fields(form, index)
    form.fields["recommend"].widget = forms.RadioSelect()
...