Django - ValidationError does not display

Hiroyuki Nuri

I recently tried the forms validations and faced an issue with ValidationError().

The form error does not appear in my website when I submit the form.

Here is the code:

forms.py

class ArticleForm(forms.ModelForm):

    def clean_titre(self):
        titre = self.cleaned_data['titre']
        if len(titre) < 5:
            raise ValidationError('myError')
        return titre

form = ArticleForm()

template.html

<div class="form-group">TITRE
  {{ form.titre.errors }}
  {{ form.titre }}
</div>

views.py

def AddArticle(request):
    form = ArticleForm(request.POST, request.FILES)

    if form.is_valid():
        save_it = form.save(commit=False)
        save_it.user = request.user
        save_it.save()
        form.save_m2m()
        return HttpResponseRedirect('/')

What did I do wrong?

--- EDIT ---

Full template.html

<form class="form" action="{% url "article.views.AddArticle" %}" method="post" enctype='multipart/form-data'>
    {% csrf_token %}

    <div class="form-group">TITRE
      {{ form.titre.errors }}
      {{ form.titre }}
    </div>
    <div class="form-group">SUMMARY
      {{ form.media }}
      {{ form.summary.errors }}
      {{ form.summary }}
    </div>
    <div class="form-group">CONTENU
      {{ form.media }}
      {{ form.contenu.errors }}
      {{ form.contenu }}
    </div>
    <div class="form-group">
      {{ form.image.errors }}
      {{ form.image }}
   </div>
   <div class="form-group">TAGS
      {{ form.tags.errors }}
      {{ form.tags }}
   </div>
   <input type="submit" class="btn btn-default" value="Submit" autocomplete="off" autocorrect="off" />
</form>

I'll post the full forms.py too, it may help.

forms.py

class ArticleForm(forms.ModelForm):

    def clean_titre(self):
        titre = self.cleaned_data['titre']
        if len(titre) < 5:
            raise ValidationError('myError')
        return titre

    class Meta:
        model = Article
        exclude = ['date', 'rating', 'user']

        widgets={
            "titre":forms.TextInput(attrs={'placeholder':'Le titre', 'class':'form-control'}),
            "contenu":forms.Textarea(attrs={'placeholder':'Le Contenu de votre message', 'class':'form-control'}),
            "image":forms.FileInput(attrs={'placeholder':'Votre Image', 'id':'uploadBtn'}),
            "tags":TagWidget(attrs={'placeholder':'Vos Tags', 'class':'form-control'}),
        }

form = ArticleForm()
miki725

You are missing the else portion within your view. Here is the general flow of what forms usually do:

  1. Users navigate to a page via GET which presents them with a form
  2. Users fill in the form and submit it by using POST
  3. If the form is valid, users are directed to a different page
  4. If the form is not valid, users are presented with the same page as in step 1 with the validation errors displayed. After users correct them, they are process to step 2.

Here is that flow in django view:

def AddArticle(request):
    if request.method == 'POST':
        form = ArticleForm(request.POST, request.FILES)
        if form.is_valid():
            save_it = form.save(commit=False)
            save_it.user = request.user
            save_it.save()
            form.save_m2m()
            return HttpResponseRedirect('/')

    else:
       form = ArticleForm()

    return render(request, 'template.html', {'form': form'})

I would however look into using class based views in Django. Initially they can seem very confusing but over time you will learn to appreciate them. Docs. Another useful resource when learning CBV.

By using CBV, the above can be simplified to:

class AddArticleView(CreateView):
    success_url = 'name_of_view_here'
    form_class = ArticleForm
    template_name = 'template.html'

# urls.py
urlpatterns = patterns('', url(r'^articles/add/$', AddArticleView.as_view()))

Template

You also need to include the overall form error in the template, in addition to each field errors:

<form class="form" action="{% url "article.views.AddArticle" %}" method="post" enctype='multipart/form-data'>
    {% csrf_token %}
    {{ form.non_field_errors }}
    ...
</form>

Please note that you might need to wrap the errors with some bootstrap markup. More info in docs

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Does not display an image! Django

From Dev

Django, show ValidationError in template

From Dev

ValidationError with Datatime field in Django

From Dev

ValidationError in FormView Django

From Dev

How to display Django friendly forms.ValidationError/message.error before form.save?

From Dev

Test django forms raised ValidationError

From Dev

Django Admin ValidationError on save with inlines

From Dev

django doesn't show ValidationError

From Dev

django rest swagger does not display properly

From Dev

Invalid Django URL does not display error page

From Dev

django rest swagger does not display properly

From Dev

validating email in registration is not raising validationError in Django?

From Dev

Django DateTimeField ValidationError: value has an invalid format

From Dev

Django raise Validationerror leads to Valuetype Error

From Dev

django - use urlpattern name in forms.ValidationError()

From Dev

Django: ValidationError as ugettext or ugettext_lazy

From Dev

How does {{ field }} display a field widget in a django template?

From Dev

the app does not display pictures in file.html - Django, Python

From Dev

django ValidationError: u'ManagementForm data is missing or has been tampered with'

From Dev

python 2.6 - django TestCase - assertRaises ValidationError clean() method

From Dev

Test doesn't raise ValidationError on Django model field

From Dev

I cannot solve Django models.DateField ValidationError

From Dev

Django Model validate_unique method don't raise ValidationError

From Dev

django.core.exceptions.validationerror '' value must be a decimal number

From Dev

How does Django display a <bound method ... >> object as a string object in django-admin?

From Dev

Django jsonfields ValidationError: [u'Enter valid JSON'] upon upgrade from 1.7 to 1.9

From Dev

ValidationError with Django REST API and generic_relations for generic foreign key writable access

From Dev

Django admin error ValidationError: [u'ManagementForm data is missing or has been tampered with']

From Dev

Django admin error ValidationError: [u'ManagementForm data is missing or has been tampered with']

Related Related

  1. 1

    Does not display an image! Django

  2. 2

    Django, show ValidationError in template

  3. 3

    ValidationError with Datatime field in Django

  4. 4

    ValidationError in FormView Django

  5. 5

    How to display Django friendly forms.ValidationError/message.error before form.save?

  6. 6

    Test django forms raised ValidationError

  7. 7

    Django Admin ValidationError on save with inlines

  8. 8

    django doesn't show ValidationError

  9. 9

    django rest swagger does not display properly

  10. 10

    Invalid Django URL does not display error page

  11. 11

    django rest swagger does not display properly

  12. 12

    validating email in registration is not raising validationError in Django?

  13. 13

    Django DateTimeField ValidationError: value has an invalid format

  14. 14

    Django raise Validationerror leads to Valuetype Error

  15. 15

    django - use urlpattern name in forms.ValidationError()

  16. 16

    Django: ValidationError as ugettext or ugettext_lazy

  17. 17

    How does {{ field }} display a field widget in a django template?

  18. 18

    the app does not display pictures in file.html - Django, Python

  19. 19

    django ValidationError: u'ManagementForm data is missing or has been tampered with'

  20. 20

    python 2.6 - django TestCase - assertRaises ValidationError clean() method

  21. 21

    Test doesn't raise ValidationError on Django model field

  22. 22

    I cannot solve Django models.DateField ValidationError

  23. 23

    Django Model validate_unique method don't raise ValidationError

  24. 24

    django.core.exceptions.validationerror '' value must be a decimal number

  25. 25

    How does Django display a <bound method ... >> object as a string object in django-admin?

  26. 26

    Django jsonfields ValidationError: [u'Enter valid JSON'] upon upgrade from 1.7 to 1.9

  27. 27

    ValidationError with Django REST API and generic_relations for generic foreign key writable access

  28. 28

    Django admin error ValidationError: [u'ManagementForm data is missing or has been tampered with']

  29. 29

    Django admin error ValidationError: [u'ManagementForm data is missing or has been tampered with']

HotTag

Archive