1

BaseInlineFormSetのサブクラスであるフォームがあり、関連するモデルのフィールドの1つについて、そのウィジェットを変更したいと思います。フォームのコードは次のとおりです。

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}}

ヘルプと入力をいただければ幸いです

4

2 に答える 2

10

インラインフォームセットは、モデルフォームのコレクションです。クラスはフォームセットに属していません。Metaモデルフォームに属しています。

通常、引数として使用inlineformset_factoryできるメソッドを使用して、インラインフォームセットクラスを作成します。form

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

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

サブクラス化する必要がある場合はBaseInlineFormset、引数としてフォームセットを指定することもできますinlineformset_factory

詳細については、インラインフォームセットのドキュメントを参照してください。

于 2012-03-30T15:43:36.083 に答える
4

ウィジェットをBaseInlineFormSetクラスに組み込むには......。

サブクラスの「add_fields」メソッドをオーバーライドします。

def add_fields(self, form, index):
    super(MyForm, self).add_fields(form, index)
    form.fields["recommend"].widget = forms.RadioSelect()
于 2012-04-16T05:09:46.793 に答える