Luc*_*iel 9 python django django-forms django-views django-class-based-views
目前,我有一个看起来像这样的表格:
class SelectBoard(generic.FormView):
form_class = forms.SelectBoard
def form_valid(self, form):
board_name = form.cleaned_data['name']
return redirect('leaderboard', board_name=board_name)
Run Code Online (Sandbox Code Playgroud)
但是,我更喜欢做更惯用的事情,并使用get_success_url. 像这样的东西:
class SelectBoard(generic.FormView):
form_class = forms.SelectBoard
def get_success_url(self):
form = ???
board_name = form.cleaned_data['name']
return reverse('leaderboard', board_name=board_name)
Run Code Online (Sandbox Code Playgroud)
然而,该形式不传递到get_success_url,并且不同于请求上下文的许多其他件(如self.request,self.kwargs,或self.object(在DetailView)),的形式不附着如在标准的任何点的属性FormView调度序列。有没有什么好方法可以访问经过清理和验证的表单数据get_success_url(即,无需self.request.POST从头开始访问或重建表单)?
您可以覆盖form_valid方法将表单编写为实例属性并self.form在内部使用get_success_url:
class SelectBoard(generic.FormView):
form_class = forms.SelectBoard
def form_valid(self, form):
"""If the form is valid, redirect to the supplied URL."""
self.form = form
return HttpResponseRedirect(self.get_success_url())
def get_success_url(self):
board_name = self.form.cleaned_data['name']
return reverse('leaderboard', board_name=board_name)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2722 次 |
| 最近记录: |