Django:FormView:刷新后如何保留表单值?

时间:2014-05-07 19:48:33

标签: python django forms

我有一个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 :(得分: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方法中进行。