Python Django Forms Forms Validate a Form in a View

Derrick Kearney
Derrick Kearney
2,962 Points

My code is failing on testing the form.is_valid(), and I am not seeing why.

This is identical to my working code from the learning exercise, less the send mail(which was not asked for). I am just not seeing the issue.

myproject/views.py
from django.core.mail import send_mail
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render

from . import forms


def send_lead(email, url):
    send_mail(
        'Lead from {}'.format(email),
        '{} submitted {}'.format(email, url),
        email,
        ['kenneth@teamtreehouse.com']
    )


def lead_form(request):
    if request.method == 'POST':
        form = forms.LeadShareForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect(reverse("lead"))
    return render(request, 'lead_form.html', {'form': form})

1 Answer

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 55,557 Points

You also need to create the form in the condition that the request is not a POST:

def lead_form(request):
    form = forms.LeadShareForm()  # <-- add default form initialization
    if request.method == 'POST':
        form = forms.LeadShareForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect(reverse("lead"))
    return render(request, 'lead_form.html', {'form': form})
Derrick Kearney
Derrick Kearney
2,962 Points

Got it Chris, thanks! Late night coding sometimes leads to simply mistakes.

The link below to Ref Markdown sheet, leads to Page 1 of 3714.