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

问题描述 投票:0回答:3

我已经像这样创建了我的表单,

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 }}

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

django django-forms
3个回答
0
投票

不幸的是 ModelChoiceField 的迭代器仅返回元组(值,标签),因此您需要进行一些重写才能使其工作,此链接应该可以帮助您:

https://github.com/simensen/srcmvn.com/blob/master/source/_posts/2013-01-15-django-advanced-model-choice-field.md


0
投票

您实际上不应该像这样迭代表单字段。只要这样做:

{{ form.option }}

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}}
© www.soinside.com 2019 - 2024. All rights reserved.