如何在django中渲染表单ModelChoicefield的属性?

时间:2013-08-30 12:05:31

标签: django django-forms

我已经创建了我的表单,

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)

views.py

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

以上所有工作都很好,我的问题是在模板中渲染,做这样的事情{% for option in form.option %} {{option}}工作正常,为什么这不起作用{{ option.price }}

显然有一些我不理解的东西,因此我在这里问,为什么我不能访问该选项的属性以及正确的方法。

3 个答案:

答案 0 :(得分:1)

不幸的是,ModelChoiceField的迭代器只返回元组(值,标签),所以你需要做一些重写才能使它工作,这个链接可以帮助你:

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

答案 1 :(得分:0)

你真的不应该迭代这样的表单字段。只是做:

{{ form.option }}

答案 2 :(得分: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}}