Django Wizard输入框按回车跳转至前序步骤问题求助
Django Wizard 问题修复方案
问题1:输入框按回车跳回上一步
问题根源
表单内存在多个type="submit"元素时,浏览器按下回车键会默认触发DOM中第一个submit元素,也就是你的「上一步」按钮。
修复方案
方案1:调整按钮DOM顺序(推荐)
将「下一步」按钮放在「上一步」按钮之前,让回车优先触发下一步操作,再通过CSS调整视觉布局保持原样式:
<div class="multiStep-footer-flex"> <!-- 先渲染下一步/注册按钮 --> {% if wizard.steps.current != wizard.steps.last %} <div class="multiStep-footer-right"> <input type="submit" class="primry-btn-2 lg-btn" value="{% translate "Next" %}"/> </div> {% else %} <div class="multiStep-footer-right"> <input type="submit" class="primry-btn-2 lg-btn" value="{% translate "Register" %}"/> </div> {% endif %} <!-- 再渲染上一步按钮 --> <div class="multiStep-footer-left"> {% if wizard.steps.prev %} <button formnovalidate name="wizard_goto_step" type="submit" class="primry-btn-2 lg-btn" value="{{ wizard.steps.prev }}">{% translate "prev step" %}</button> {% endif %} </div> </div>
方案2:给「下一步」按钮添加autofocus属性
让浏览器默认聚焦到「下一步」按钮,回车时直接触发该按钮:
<input type="submit" class="primry-btn-2 lg-btn" value="{% translate "Next" %}" autofocus/>
最后一步时,给「Register」按钮添加autofocus即可。
问题2:返回上一步时密码字段为空
问题根源
Django出于安全考虑,默认不会在表单中保留密码字段的输入值,即使数据已存储在Wizard的会话中。
修复方案
方案1:重写Wizard的get_form_initial方法
从Wizard存储中提取已保存的密码,填充到账户信息步骤的初始值:
from django.contrib.formtools.wizard.views import SessionWizardView class YourWizardView(SessionWizardView): def get_form_initial(self, step): initial = super().get_form_initial(step) # 假设账户信息步骤的标识为'account' if step == 'account': stored_data = self.get_cleaned_data_for_step('account') if stored_data and 'password' in stored_data: initial['password'] = stored_data['password'] return initial
方案2:修改密码字段的Widget
给密码字段设置render_value=True,强制保留输入值:
from django import forms class AccountForm(forms.Form): password = forms.CharField( widget=forms.PasswordInput(render_value=True) )
内容的提问来源于stack exchange,提问作者Israa Salameh
相关产品推荐
相关产品推荐

