Django: 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 中做到这一点。谢谢!
2 个回答
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
方法里进行。
0
我会通过使用cookie来存储值,每次当一个元素失去焦点时,就更新这个cookie的值。
然后,如果表单提交失败,服务器会把一个叫做'valid-submission'的cookie设置为false
。如果页面刷新了,一个JavaScript函数会检查这个valid-submission
的设置,如果是false,就会把之前填写的内容重新填回去。否则,服务器会删除这个cookie的设置。