4

私のモデルフォームはサブシステムフォームから継承しています。フォーム内のユーザーの選択肢を制限したいと思います。(特に名前)私はウィジェットを使わなければならないことを知っています。しかし、それは機能しません。

SubsytemFormを使用する必要があります。

SUBSYSTEM_CHOICES = (a1,a2,a3)


class Subsystem(models.Model):
    name = models.CharField("Name", max_length=20)


class SubsytemForm(forms.ModelForm):   
    class Meta:
        model = Subsystem
        widgets = {
            'name': ChoiceField(widget=RadioSelect, choices=SUBSYSTEM_CHOICES)
        }
4

2 に答える 2

5

djangoモデルフォームのドキュメントから:

このようなフォームフィールドを明示的にインスタンス化すると、Djangoはその動作を完全に定義したいと想定します。したがって、デフォルトの属性(max_lengthやrequiredなど)は、対応するモデルから描画されません。モデルで指定された動作を維持する場合は、フォームフィールドを宣言するときに関連する引数を明示的に設定する必要があります。

あなたはで試すことができます:

class SubsytemForm(forms.ModelForm):  
    name =  forms.ChoiceField(widget=RadioSelect, choices= choices )
    class Meta:
        model = Subsystem

また、あなたはすることができます

class SubsytemForm(forms.ModelForm):  
    class Meta:
        model = Subsystem
    def __init__(self, *args, **kwargs):
        self.name_choices = kwargs.pop('name_choices', None)
        super(SubsytemForm,self).__init__(*args,**kwargs)
        self.fields['name'].queryset= self.name_choices  

作成時name_choicesにパラメータとして送信します。SubsytemForm選択肢はクエリセットである必要があることに注意してください。

また、 Django ModelFormでForeignKeyの選択をフィルタリングするにはどうすればよいですか?を読む必要があります。

于 2012-07-11T13:53:17.330 に答える
3

SUBSYSTEM_CHOICESchoicesキーと値のペアがないため、は属性の有効な値ではありません。次のようなものが必要です。

SUBSYSTEM_CHOICES = (
    (a1, 'a1 Display'),
    (a2, 'a2 Display'),
    (a3, 'a3 Display'),
)
于 2012-07-11T14:56:08.930 に答える