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
Never miss a story on Django.wiki

Subscribe for fresh tutorials, snippets, and updates.

By subscribing you agree to our Privacy Policy.