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

你真的不应该像那样迭代表单字段。做就是了:

{{ form.option }}
于 2013-08-30T13:59:47.080 回答
0

您是否尝试过使用 model_formset?当您想基于过滤的模型查询集创建表单集时,不确定为什么要使用常规表单并初始化查询集两次。像这样的东西:

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 回答