if the form is not valid then form.errors should contain human-readable
errors for each field, including the one you validate yourself (the string
inside the raise ValidationError call), you can return that.

On Thu, Dec 22, 2016 at 11:49 PM, Chris Kavanagh <[email protected]> wrote:

> Yeah, I was wrong Vijay. For some odd reason I thought the ValidationError
> would catch it BEFORE submitted. . .
>
> I re-read the docs and saw I was wrong. .
>
> In other words, I I try to submit the form with the input field empty, I
> get a small pop up error saying "Please Enter An Email".
>
> Or, if I use an invalid email format, I get the same popup error saying
> "Please Enter An Email Address."
>
> Is there a way to do this with this (with django)?
>
> On Thursday, December 22, 2016 at 9:30:22 PM UTC-5, Vijay Khemlani wrote:
>>
>> 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 <[email protected]> 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 [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at https://groups.google.com/group/django-users.
>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>> gid/django-users/8ff5313f-3783-4897-afa7-5edd4fe1b436%40googlegroups.com
>>> <https://groups.google.com/d/msgid/django-users/8ff5313f-3783-4897-afa7-5edd4fe1b436%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> 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 [email protected].
> To post to this group, send email to [email protected].
> 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/39ec5818-92b6-4b2c-ad9a-58e09acd5427%40googlegroups.com
> <https://groups.google.com/d/msgid/django-users/39ec5818-92b6-4b2c-ad9a-58e09acd5427%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
> 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 [email protected].
To post to this group, send email to [email protected].
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/CALn3ei35Oqshto4rWOT9%2Bk9MyWtw1kT74iEtrW1Jhsfw%3DXy2Rw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to