我已经像这样创建了我的表单,
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 }}
。
显然有些东西我不理解,因此我在这里问,为什么我不能访问该选项的属性以及正确的方法是什么。
不幸的是 ModelChoiceField 的迭代器仅返回元组(值,标签),因此您需要进行一些重写才能使其工作,此链接应该可以帮助您:
您实际上不应该像这样迭代表单字段。只要这样做:
{{ form.option }}
您尝试过使用 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}}