8

choiceFieldいくつかのオプションで選択フィールドを作成するために があります。このようなもの:

forms.py
    class NewForm(forms.Form):
        title = forms.CharField(max_length=69)
        parent = forms.ChoiceField(choices = CHOICE)

しかし、事前定義されたタプルを持たずにオプションを作成できるようにしたいと考えています (これは で必要ですChoiceField)。基本的にrequest.userにアクセスして、ユーザーごとにいくつかのoptionsタグを埋める必要があるのですが、forms.Formのクラスでrequestを使う方法がないかわかりません。

NewForm別の方法は、 viaのインスタンスを事前に設定することです。

views.py
form = NewForm(initial={'choices': my_actual_choices})

しかし、ダミーの CHOICE を追加して NewForm を作成する必要があり、 my_actual_choices はとにかく機能していないようです。

これを解決する3番目の方法は、ChoiceFieldのサブクラスを作成して再定義することだと思いますが、これをsave()行う方法がわかりません。

4

1 に答える 1

8

initをオーバーライドすることで、それらを動的に設定できます。基本的にコードは次のようになります。

class NewForm(forms.Form):
    def __init__(self, choices, *args, **kwargs):
        super(NewForm, self).__init__(*args, **kwargs)
        self.fields["choices"] = forms.ChoiceField(choices=choices)

NewForm(my_actual_choices)またはNewForm(my_actual_choices, request.POST, request.FILES)など。

于 2012-07-21T01:19:45.760 に答える