Field-Specific Validation
A snippet showing how to validate specific form fields.
# forms.py
from django import forms
class SignupForm(forms.Form):
username = forms.CharField(max_length=30)
age = forms.IntegerField(min_value=0)
def clean_username(self):
value = self.cleaned_data["username"].strip()
if " " in value:
raise forms.ValidationError("Username cannot contain spaces.")
if not value.isalnum():
raise forms.ValidationError("Username must be alphanumeric.")
return value.lower()
def clean_age(self):
age = self.cleaned_data["age"]
if age < 13:
raise forms.ValidationError("You must be at least 13 years old to register.")
return age
# views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import SignupForm
def signup(request):
if request.method == "POST":
form = SignupForm(request.POST)
if form.is_valid():
# Create user or continue workflow
messages.success(request, "Account created successfully.")
return redirect("signup")
else:
form = SignupForm()
return render(request, "signup.html", {"form": form})
# templates/signup.html
<div class="row justify-content-center">
<div class="col-md-8 col-lg-6">
<form method="post" class="bg-white border rounded p-3">
{% csrf_token %}
<h5 class="mb-3">Sign up</h5>
{{ form.as_p }}
{% if form.errors %}
<div class="alert alert-danger" role="alert">Please fix the errors below.</div>
{% endif %}
<button type="submit" class="btn btn-primary w-100">Create account</button>
</form>
</div>
</div>
Explanation:
-
Implement
clean_FIELDNAME()for per-field validation and normalization. -
Return the cleaned/normalized value to store it in
cleaned_data. -
Combine with
clean()for cross-field checks when needed.
- Category Forms & Validation
- Total Views 848
- Last Modified 23 September, 2025
- Tags #forms #validation #clean_field #input
Previous snippet
Form Validation with clean()
Next snippet