2

私は自分のフォームをそのように作成しました、

class PartialOrderItemform(forms.Form):
        option = forms.ModelChoiceField(queryset = OptionalItems.objects.all(),widget= forms.RadioSelect())

        def __init__(self,item ,*args, **kwargs):
            super(PartialOrderItemform, self).__init__(*args, **kwargs)
            self.fields['option'].queryset = OptionalItem.objects.filter(item=item)

ビュー.py

def show_item(request,id):
    ....
    final_form = form.PartialOrderItemform(item=id)
    ....

上記はすべて正常に機能しています。私の問題は、テンプレートでのレンダリングであり、このようなことを{% for option in form.option %} {{option}}うまく行ってい{{ option.price }}ます。

明らかに、私が理解していないことがあるので、ここで質問します。オプションの属性にアクセスできない理由と、それを行う正しい方法は何ですか。

4

3 に答える 3

1

残念ながら、ModelChoiceField のイテレータはタプル (値、ラベル) のみを返すため、機能させるにはオーバーライドを行う必要があります。次のリンクが役に立ちます。

http://srcmvn.com/blog/2013/01/15/django-advanced-model-choice-field/

于 2013-08-30T13:45:30.930 に答える
0

model_formset を使用してみましたか? フィルター処理されたモデル クエリセットに基づいてフォームセットを作成するときに、通常のフォームを使用してクエリセットを 2 回初期化している理由がわかりません。このようなもの:

class PartialOrderItemformSet(BaseModelFormSet):
    def __init__(self, item, *args, **kwargs):
        super(PartialOrderItemformSet, self).__init__(*args, **kwargs)
        self.queryset = OptionalItem.objects.filter(item=item)

これで、テンプレートで、for ループ内の基になるモデルの単項メソッドにアクセスできるようになります。

{{form.instance.price}}
于 2013-08-30T16:44:51.987 に答える