我有一个FormView如下:
class SignUpView(FormView):
template_name = '/accounts/signup.html'
form_class = SignUpForm
def get_context_data(self, **kwargs):
context = super(SignUpView, self).get_context_data(**kwargs)
# code..
return context
def get_initial(self):
initial = super( SignUpView, self ).get_initial()
# code..
initial = {
'email': email,
'dob_mm': dob_mm,
'dob_dd': dob_mm,
'dob_yyyy': dob_yyyy,
'email_conf': "",
'password': "",
}
return intial
def form_valid(self, form):
# hit external APIs to validate, charge card, etc.
# if any errors from APIs, return to SignUp form
messages.error( self.request, errors )
return redirect('/account/signup/')
此时,如果重新加载页面(由于任何错误),表单将重新初始化为空白,除了我在get_initial()中准备的一些字段。有没有办法自动保留输入字段,或者我是否必须手动存储它们,检测到由于错误而刷新,然后在get_initial()中手动设置所有字段?
我无法找到任何描述如何使用FormView执行此操作的帖子或文档。谢谢!
答案 0 :(得分:0)
我会通过cookie实现值存储,每次发生模糊事件时,刚刚失去焦点的元素会更新cookie值。
然后,如果表单提交失败,服务器会设置一个有效的提交内容' Cookie设置为false
。如果页面刷新,则javascript函数会检查valid-submission
设置,如果为false,则重新填充字段。否则,服务器将删除cookie设置。
答案 1 :(得分:0)
在进行重定向时,您丢失了所有帖子数据,这与Django无关。如果遇到任何错误,您应该只渲染页面,而不是进行重定向:
class SignUpView(FormView):
...
def form_valid(self, form):
# check for errors
if errors:
return self.render_to_response(self.get_context_data(form=form, errors=errors))
return redirect(self.get_success_url())
最好还是保持逻辑正确分离,并在表单类本身中进行错误检查,可以在单个字段的clean_<field>
方法中,也可以在整个表单的clean
方法中进行。