django中的动态形式

时间:2011-01-22 19:53:01

标签: django django-forms

我已经构建了自己的动态表单,以下是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是否有效(但事实并非如此)。

1 个答案:

答案 0 :(得分:1)

您尚未在视图中实例化表单。 make_question_form会返回一个新表单 class - 通常当您在视图中使用表单类时,您会form = MyFormClass()form = MyFormClass(request.POST)

因此,您需要在form = question_form()之前执行render_to_response,然后您才能在模板中执行{{ form.as_p }}