我已经构建了自己的动态表单,以下是james bennetts的例子。 在forms.py
中使用以下行def make_question_form(request):
fields = { 'venue' : forms.CharField(widget=forms.HiddenInput()),
'survey' : forms.CharField(widget=forms.HiddenInput())}
return type('Question_Form',(forms.BaseForm,), { 'base_fields': fields })
以及构建它的视图中的以下内容(我知道它不是真正的动态,我打算接下来添加动态。
question_form = make_question_form(request)
question_form.base_fields['venue'] = this_venue.name
question_form.base_fields['survey'] = this_survey.name
return render_to_response("survey/questions.html", locals(), context_instance=RequestContext(request))
但我不确定在模板中将它作为什么内容,这是教程中没有真正涵盖的内容。
我已经知道以下工作
{% for base_field in question_form.base_fields %}
{{ base_field.type }}
{% endfor %}
但我认为将其构建为表单的目的是能够执行类似
的操作question_form.as_p
并将其包装在我自己的表单标签中。
我是否错过了这一点,或者as_p是否有效(但事实并非如此)。
答案 0 :(得分:1)
您尚未在视图中实例化表单。 make_question_form
会返回一个新表单 class - 通常当您在视图中使用表单类时,您会form = MyFormClass()
或form = MyFormClass(request.POST)
。
因此,您需要在form = question_form()
之前执行render_to_response
,然后您才能在模板中执行{{ form.as_p }}
。