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:
FormorModelForm: Define fields and validation rules.is_valid(): Checks if form data meets all validation rules.clean()andclean_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 accessingcleaned_data. - Raising
ValidationErroroutsideclean()orclean_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.errorsin 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.