0
0
DjangoHow-ToBeginner · 4 min read

How to Validate Form in Django: Simple Guide with Examples

In Django, you validate a form by creating a Form or ModelForm class and calling its is_valid() method. This method checks all fields and runs any custom validation you define, allowing you to handle errors and save valid data.
📐

Syntax

Django form validation involves these key parts:

  • Form or ModelForm: Define fields and validation rules.
  • is_valid(): Checks if form data meets all validation rules.
  • clean() and clean_fieldname(): Custom validation methods.
  • errors: Holds validation error messages.
python
from django import forms

class MyForm(forms.Form):
    name = forms.CharField(max_length=100)
    age = forms.IntegerField()

    def clean_age(self):
        age = self.cleaned_data.get('age')
        if age < 18:
            raise forms.ValidationError('Must be at least 18 years old.')
        return age

# Usage in view
form = MyForm(data=request.POST)
if form.is_valid():
    # Process valid data
    name = form.cleaned_data['name']
else:
    # Handle errors
    errors = form.errors
💻

Example

This example shows a simple Django form with validation for a name and age field. The age must be 18 or older. The view processes the form, checks validation, and displays errors if any.

python
from django import forms
from django.http import HttpResponse
from django.shortcuts import render

class RegistrationForm(forms.Form):
    name = forms.CharField(max_length=100)
    age = forms.IntegerField()

    def clean_age(self):
        age = self.cleaned_data.get('age')
        if age < 18:
            raise forms.ValidationError('You must be at least 18 years old to register.')
        return age

def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            return HttpResponse(f"Welcome, {form.cleaned_data['name']}!")
        else:
            return render(request, 'register.html', {'form': form})
    else:
        form = RegistrationForm()
        return render(request, 'register.html', {'form': form})
Output
If form data is valid, user sees: Welcome, [name]! If invalid, form errors show on the page.
⚠️

Common Pitfalls

Common mistakes when validating forms in Django include:

  • Not calling is_valid() before accessing cleaned_data.
  • Raising ValidationError outside clean() or clean_fieldname() methods.
  • Forgetting to return the cleaned value in custom clean_fieldname() methods.
  • Not handling form errors in the template, so users don't see validation messages.
python
from django import forms

class BadForm(forms.Form):
    age = forms.IntegerField()

    def clean_age(self):
        age = self.cleaned_data.get('age')
        if age < 18:
            # Missing return statement here causes issues
            raise forms.ValidationError('Must be 18 or older.')
        return age

# Correct way
class GoodForm(forms.Form):
    age = forms.IntegerField()

    def clean_age(self):
        age = self.cleaned_data.get('age')
        if age < 18:
            raise forms.ValidationError('Must be 18 or older.')
        return age
📊

Quick Reference

Key points for Django form validation:

  • Use is_valid() to trigger validation.
  • Access valid data with cleaned_data.
  • Use clean_fieldname() for field-specific checks.
  • Use clean() for form-wide validation.
  • Display form.errors in templates to show messages.

Key Takeaways

Always call is_valid() before using form data to ensure validation runs.
Use clean_fieldname() methods to add custom validation for individual fields.
Return the cleaned value in custom clean_fieldname() methods to avoid errors.
Handle and display form.errors in your templates to inform users about validation issues.
Use clean() method for validations that depend on multiple fields.