Django функциональный вид на основе FormView - PullRequest
0 голосов
/ 26 апреля 2020

Мой код написан в функционально-ориентированных представлениях, и я узнал о обобщенных c представлениях, встроенных в 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. Я видел документацию и другие ответы в стеке, но я не мог понять, как проверить форму в ней. Заранее спасибо.

1 Ответ

0 голосов
/ 26 апреля 2020

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