我一直在嘗試使用formtools嚮導在我的Django應用程序中添加一個多頁面的表單。我需要爲每一步設置自定義表單。共有2個步驟。下面是我的代碼:自定義模板不工作在Django的formtools
views.py
TEMPLATES = {"initial": "my_app/form_initial.html",
"final": "my_app/form_last.html"}
class ModelCreateView(SessionWizardView):
model = MyModel
template_name = "my_app/model_form.html"
file_storage =
FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'custom'))
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
程序my_app/model_form.html
{% extends "my_app/base.html" %}
{% block extra_css %}
{{ wizard.form.media }}
{% endblock %}
{% block content %}
<form action="" method="post">
{% csrf_token %}
{{ wizard.management_form }}
<h1>{{ wizard }}</h1>
{% if wizard.form.forms %}
<h1>{{ wizard.form.forms }}</h1>
{{ wizard.form.management_form }}
{% for form in wizard.form.forms %}
{{ form }}
{% endfor %}
{% else %}
{{ wizard.form }}
{% endif %}
<input type="submit" value="submit"/>
</form>
{% endblock content %}
程序my_app/form_initial.html
<-- custom form template for step 1 -->
程序my_app/form_last。 html
<-- custom form template for step 2 -->
,如果我理解正確,自定義表單模板將取代基本模板的
{{ form }}
標籤被稱爲(程序my_app/model_form.html)。
我的問題在於,使用當前代碼,直接調用my_app/form_initial.html。
另外,如果我嘗試只是包括
{{ wizard.management_form }}
在程序my_app/form_initial.html,並附必要的表單元素,上提交,它只是重新加載當前頁面,而不是帶我去my_app應用/ form_last.html
請讓我知道我在這裏做錯了什麼。
UPDATE:我通過正確擴展基本表單模板解決了自定義模板的問題。但現在,當我提交第一步時,同一步驟頁面將重新加載而不是進入下一步。請讓我知道我該如何調試?
更新2:我試着調試更多,發現這個,我的字段沒有得到驗證,即使post請求包含字段,form.is_valid()
返回false。 form.errors
說所有的字段都是missing
你是否在任何地方使用'WIZARD_FORMS'變量? –
我正在使用WIZARD_FORMS來命名正在使用的表單(並可以選擇跳過一個表單)。我也在嚮導類中有一個變量:form_list = [WizardForm0a,WizardForm2,WizardForm3,WizardForm4,WizardForm5]。我不記得每一節我需要的是什麼,但最後它終於工作了。 –
我在urls文件 'url(r'^ my_app/create/$',MyModelCreateView.as_view([(「initial」,MyModelFormInitial), (「final」,MyModelFormLast)]),name =「 model_create「)' 但它似乎並不工作 –