Python Django Forms Forms Validate a Form in a View

Sagar Thakkar
Sagar Thakkar
8,812 Points

It looks task one is not passing

i tried below solution combination please help

1 > edited send_mail() and added send_lead to line no 23 without kwargs 2> edited send_mail() and added send_lead to line no 23 with kwargs 3> non edited send_mail() and added send_lead to line no 23 without kwargs 4> non edited send_mail() and added send_lead to line no 23 with kwargs now i have no clue

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):
    form = forms.LeadShareForm()
    if request.method == 'POST':
        form = forms.LeadShareForm(request.POST)
        if form.is_valid():
            send_lead(**form.cleaned_data["link"])
            return HttpResponseRedirect(reverse("lead"))
    return render(request, 'lead_form.html', {'form': form})

1 Answer

Ryan S
Ryan S
27,254 Points

Hi Sagar,

send_lead() takes two arguments, but you are trying to unpack one key-value pair.

Normally you wouldn't need to specify the keys if you wanted to unpack a dictionary in a function call. But there is a keyword mismatch here. send_lead() takes the arguments "email" and "url", but the cleaned_data dictionary has the keys "email" and "link".

To get around this, you can simply input the values individually:

send_lead(form.cleaned_data['email'], form.cleaned_data['link'])

Hope this helps.