为什么 django 向导表单在填写表单之前不返回?
Why django wizard form does not go back before filling the form?
我正在尝试使用两个不同的模板将一个 Django 表单拆分为两个表单。所以在谷歌搜索后我发现解决方案是使用向导形式。这是我的代码:
在view.py中:
FORMS = [("0", postform_1stpage),
("1", postform_2ndpage)]
TEMPLATES = {"0": "myapp/postform_1stpage.html",
"1": "myapp/postform_2ndpage.html"}
class ExampleWizard(SessionWizardView):
instance = None
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'images_folder'))
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
def get_form_instance( self, step ):
if self.instance is None:
self.instance = Post() #model instance
return self.instance
def done(self, form_list, **kwargs):
self.instance.author = self.request.user
self.instance.save()
return redirect('home')
def get_form_step_files(self, form):
return form.files
def process_step_files(self, form):
return self.get_form_step_files(form)
并在 url.py 中:
`path('create/post/new', login_required(ExampleWizard.as_view(FORMS)), name='new-post')`
对于表单步骤 2 中的第二个模板:
{% block content %}
<form method="POST" action="" enctype="multipart/form-data">
<fieldset class="form-group">
{% csrf_token %}
{{ wizard.form.management_form }}
<div class="row justify-content-center">
<div class="form-input mt-10">
<div class="image_preview">
<img id="file-preview" src="{{ wizard.form.image.url }}" alt="....">
</div>
<label for="file-ip">Add picture</label>
<input type="file" id="file-ip" name ="image" id="image.id" accept="images_forlder/*" onchange="showPreview(event);">
</div>
</fieldset>
<div class="py-auto px-auto">
# the bug is related to this part
<button type="submit" class="btn btn-sm btn-outline-info" style="font-weight: 700;" name="wizard_goto_step"value="{{ wizard.steps.first }}" >Back</button>
</div>
<input type="submit" value="Submit" />
</form>
{{ wizard.form.media }}
{% endblock content %}
我的问题:
我在第二页按后退按钮后,第二页表单验证要求我先填写表单再让回,我不知道为什么!!
您的表单在提交后自然会得到验证!尝试将 formnovalidate
添加到您的 button
:
<button type="submit" class="btn btn-sm btn-outline-info" style="font-weight: 700;" name="wizard_goto_step"value="{{ wizard.steps.prev }}" formnovalidate>Back</button>
我正在尝试使用两个不同的模板将一个 Django 表单拆分为两个表单。所以在谷歌搜索后我发现解决方案是使用向导形式。这是我的代码:
在view.py中:
FORMS = [("0", postform_1stpage),
("1", postform_2ndpage)]
TEMPLATES = {"0": "myapp/postform_1stpage.html",
"1": "myapp/postform_2ndpage.html"}
class ExampleWizard(SessionWizardView):
instance = None
file_storage = FileSystemStorage(location=os.path.join(settings.MEDIA_ROOT, 'images_folder'))
def get_template_names(self):
return [TEMPLATES[self.steps.current]]
def get_form_instance( self, step ):
if self.instance is None:
self.instance = Post() #model instance
return self.instance
def done(self, form_list, **kwargs):
self.instance.author = self.request.user
self.instance.save()
return redirect('home')
def get_form_step_files(self, form):
return form.files
def process_step_files(self, form):
return self.get_form_step_files(form)
并在 url.py 中:
`path('create/post/new', login_required(ExampleWizard.as_view(FORMS)), name='new-post')`
对于表单步骤 2 中的第二个模板:
{% block content %}
<form method="POST" action="" enctype="multipart/form-data">
<fieldset class="form-group">
{% csrf_token %}
{{ wizard.form.management_form }}
<div class="row justify-content-center">
<div class="form-input mt-10">
<div class="image_preview">
<img id="file-preview" src="{{ wizard.form.image.url }}" alt="....">
</div>
<label for="file-ip">Add picture</label>
<input type="file" id="file-ip" name ="image" id="image.id" accept="images_forlder/*" onchange="showPreview(event);">
</div>
</fieldset>
<div class="py-auto px-auto">
# the bug is related to this part
<button type="submit" class="btn btn-sm btn-outline-info" style="font-weight: 700;" name="wizard_goto_step"value="{{ wizard.steps.first }}" >Back</button>
</div>
<input type="submit" value="Submit" />
</form>
{{ wizard.form.media }}
{% endblock content %}
我的问题:
我在第二页按后退按钮后,第二页表单验证要求我先填写表单再让回,我不知道为什么!!
您的表单在提交后自然会得到验证!尝试将 formnovalidate
添加到您的 button
:
<button type="submit" class="btn btn-sm btn-outline-info" style="font-weight: 700;" name="wizard_goto_step"value="{{ wizard.steps.prev }}" formnovalidate>Back</button>