Python Django Forms Forms Validate a Form in a View

Jovan Dandridge
Jovan Dandridge
12,834 Points

having trouble getting this one

need help

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(),
        '{} submitted {}'.format(email, url),
        email,
        ['kenneth@teamtreehouse.com']
    )


def lead_form(request):
    form = forms.LeadShareForm()
    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})

3 Answers

You're very close, literally five characters off. You're passing request.POST into forms.LeadShareForm as an positional argument and not as a named argument. Give it the name data and it will pass.

def lead_form(request):
    form = forms.LeadShareForm()
    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})
def lead_form(request):
    form = forms.LeadShareForm()
    if request.method == "POST":
        form = forms.LeadShareForm(data=request.POST)
        if form.is_valid():
            return HttpResponseRedirect(reverse("lead"))
    return render(request, 'lead_form.html', {'form': form})
Jovan Dandridge
Jovan Dandridge
12,834 Points

thanks, but im having trouble on challenge 2 of the task

My bad. See my second answer

Right after checking if form.is_valid you'll call the function that they have already provided you. All you need to do is fill in the email and url from the form.cleaned_data dictionary.

def lead_form(request):
    form = forms.LeadShareForm()
    if request.method == 'POST':
        form = forms.LeadShareForm(request.POST)
        if form.is_valid():
            send_lead(
                email=form.cleaned_data.get('email'),
                url=form.cleaned_data.get('link'),
            )
            return HttpResponseRedirect(reverse('lead'))
    return render(request, 'lead_form.html', {'form': form})