1

私のDjangoアプリケーションでは、通常、整数値の範囲から選択できるChoiceFieldを持つフォームを持っています。

class FormNumber(forms.Form):
list=[]
for i in range(1, 11):
    list.append((i,i))
number=forms.ChoiceField(choices=list, initial=1)

場合によっては、より小さな範囲を使用してビューメソッドからデフォルトの選択肢リストをオーバーライドする必要がありますが、この方法でそれを実行しようとしています

n=10-len(request.session["items"])
    if n>0:
        list=[]
        for i in range(1, n+1):
            list.append((i,i))
        form=FormNumber(choices={'number':list}, initial={'number':1})

TypeError が発生しました - __ init__() が予期しないキーワード引数 'choices' を取得しました。フォーム クラスからパラメーターを削除しようとしましたが、同じ結果が得られます。

上記と同様の方法で、ビューからの新しい選択肢リストで ChoiceField を初期化する方法はありますか? 前もって感謝します :)

4

2 に答える 2

2

私はコードを投稿します、多分将来誰かが同様の問題を解決する必要があります。

フォームコードは次のようになります。

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

そして私はそれを単にビューから呼び出します

form=FormNumber(list=number_list) 
于 2009-11-17T09:10:10.607 に答える
1

__init__(choices=None)フォーム クラスに関数を追加し、それを使用してFormNumberChoiceField を初期化します。 が提供されていない場合(デフォルトは)、初期化はデフォルトで行うことを行います。numberNone
choicesNone

于 2009-11-16T12:11:20.550 に答える