我已经创建了我的表单,
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 }}
。
显然有一些我不理解的东西,因此我在这里问,为什么我不能访问该选项的属性以及正确的方法。
答案 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}}