python - 基于 Django 功能的视图到 FormView
问题描述
我的代码是用基于功能的视图编写的,并且我了解了 Django 中内置的通用视图。我已经使用 Views、TemplateViews 进行了更改,但我卡在了 FormView 上。
基于功能的视图:
def NewTeam(request):
form = NewTeamForm()
if request.method == 'POST':
form= NewTeamForm(request.POST, request.FILES)
if form.is_valid():
form.save(commit = True)
return teams(request)
else:
print("Invalid Form")
return render(request,'teamform.html', {'form':form})
我试过的FormView
class NewTeam(FormView):
template_name = 'teamform.html'
form_class = NewTeamForm
success_url = '.'
def get_context_data(self,**kwargs):
context = super(NewTeam, self).get_context_data(**kwargs)
form = NewTeamForm()
if request.method == 'POST':
form= NewTeamForm(request.POST, request.FILES)
if form.is_valid():
form.save(commit = True)
return teams(request)
else:
print("Invalid Form")
context['form'] =form
return context
我可以理解我需要在第一个函数中获取上下文并创建一个新函数form_valid
。我已经看过文档和其他堆栈答案,但我无法理解如何验证其中的表单。提前致谢。
解决方案
Django FormView 自动调用表单验证
from django.http import HttpResponseRedirect
class NewTeam(FormView):
template_name = 'teamform.html'
form_class = NewTeamForm
success_url = '.'
def form_valid(self, form):
# Form is Valid
new_team = form.save(commit=True)
# Do whatever
return HttpResponseRedirect(self.get_success_url())
def form_invalid(self, form):
# Form is Invalid
print(form.errors)
return self.render_to_response(self.get_context_data(form=form))