首页 > 解决方案 > 基于 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。我已经看过文档和其他堆栈答案,但我无法理解如何验证其中的表单。提前致谢。

标签: pythondjangodjango-forms

解决方案


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))

推荐阅读