Thursday, December 22, 2016

Re: Form Validation Error NOT Raised When Form Is Submitted

I'm not following

If you submit the form with incorrect information (non unique email) then your view does not return anything because form.is_valid() returns False

Validation errors don't prevent the form from being submitted, they prevent the form from validation (making form.is_valid() return False and adding values to form.errors)

On Thu, Dec 22, 2016 at 5:14 PM, Chris Kavanagh <ckava3@gmail.com> wrote:
I have a model form called "ContactForm" that has an email field. I created a custom forms.ValidationError in "clean_email" method

 which checks to see if the email is already in the database , however it's never raised on submit.


 When submit is called, the view runs and I get the error "The view customer.views.send_email didn't return an HttpResponse object.

 It returned None instead", because it's not being passed an actual email. . 

I don't understand why the forms.ValidationError isn't stopping it from being submitted? The query in the "clean_email" works fine, so that's not the problem.

I've used this same code before with no problems. I'm sure it's something easy I'm forgetting or missing, but any help is GREATLY appreciated. .

Note: I am using django crispy forms


#Model:
class Customer(models.Model):
    email = models.EmailField(max_length=70,blank=False)
    created = models.DateTimeField(auto_now_add=True)

    class Meta:
    ordering = ('email',)

def __unicode__(self):
return self.email




#Form:
class ContactForm(forms.ModelForm):

class Meta:
model = Customer
fields = ['email']

def clean_email(self):
email = self.cleaned_data['email']
cust_email = Customer.objects.filter(email=email).count()
if cust_email:
raise forms.ValidationError('This email is already in use.')
return email




#View:
def send_email(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            email = cd['email']
            new_email = form.save(commit=True)
            to_email = form.cleaned_data['email']   # cd['email']
            subject = 'Newsletter'
            from_email = settings.EMAIL_HOST_USER
            message = 'You Are Now Signed Up For BenGui Newsletter!'
            #send_mail(subject, message, from_email, [to_email,], fail_silently=False)
            return redirect('home')
    else:
        return render(request, 'home.html', context)



#customer.urls:

urlpatterns = [    
    url(r'^send-email/$', views.send_email, name='send_email'),
    ]


#Template:

<form action="{% url 'customer:send_email' %}" method="post">
                    {% csrf_token %}
                    {{ form|crispy }}
                <input class='btn btn-success btn-lg btn-block' type='submit' value='Submit'></input>
            </form>

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/8ff5313f-3783-4897-afa7-5edd4fe1b436%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CALn3ei1L-1Lc%2BEst-c9nfJR%3DE8Rk2pZHwRssCXgtWRNpzXHBWg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment