Custom Field Validations in Django Models
Last Updated :
21 May, 2025
Field validation ensures that the data entered into a model field meets specific rules before it’s saved to the database.
While Django provides built-in validations for common checks, custom field validation lets you enforce your own rules, such as verifying formats, length limits, or complex conditions like ensuring an email belongs to a certain domain.
Custom validations run automatically when creating or updating model instances, helping keep your data clean and consistent without adding extra validation logic in forms or views.
Prerequisite: Field Validations and Built-In Field Validations
Syntax for Custom Validators
field_name = models.Field(validators=[validator_function1, validator_function2])
- validators is a list of validator functions that will be executed when the field value is set.
- Each validator function accepts a single argument, value, which is the data entered for the field.
Django Custom Field Validation Example
Let’s look at an example where we create a custom validator to only accept email addresses ending with @gmail.com. Consider a project named geeksforgeeks having an app named geeks.
Refer to the following articles to check how to create a project and an app in Django.
Step 1: Define the Model
In your Django app’s models.py, start with a simple model having a CharField for email:
Python
from django.db import models
from django.db.models import Model
class GeeksModel(Model):
geeks_mail = models.CharField(max_length = 200)
Step 2: Create a Validator Function
Now, let’s create a custom validator function that will check whether the email address ends with @gmail.com. If it doesn't, the function will raise a ValidationError.
Python
from django.core.exceptions import ValidationError
def validate_geeks_mail(value):
if not value.endswith("@gmail.com"):
raise ValidationError("This field accepts only Gmail addresses.")
Step 3: Attach the Validator to the Model Field
Next, we attach this validator function to the geeks_mail field in our model using the validators parameter:
Python
from django.db import models
from django.core.exceptions import ValidationError
def validate_geeks_mail(value):
if not value.endswith("@gmail.com"):
raise ValidationError("This field accepts only Gmail addresses.")
class GeeksModel(models.Model):
geeks_mail = models.CharField(max_length=200, validators=[validate_geeks_mail])
Now, the geeks_mail field will only accept email addresses containing @gmail.com. Any other email address will trigger a ValidationError. Let us try to create an instance without gmail.com and check if our validation worked or not.
Note that after every change in models.py one needs to run makemigrations and migrate commands.
In your browser go to http://localhost:8000/admin/geeks/geeksmodel/add/ and enter "[email protected]":
Custom ValidationSo the validation worked and this field can only accept email ids ending with @gmail.com. This way one can apply any kind of custom validation on value.
Similar Reads
Django Models A Django model is a Python class that represents a database table. Models make it easy to define and work with database tables using simple Python code. Instead of writing complex SQL queries, we use Djangoâs built-in ORM (Object Relational Mapper), which allows us to interact with the database in a
8 min read
Django ORM - Inserting, Updating & Deleting Data Django's Object-Relational Mapping (ORM) is one of the key features that simplifies interaction with the database. It allows developers to define their database schema in Python classes and manage data without writing raw SQL queries. The Django ORM bridges the gap between Python objects and databas
4 min read
Django Basic App Model - Makemigrations and Migrate Django's Object-Relational Mapping (ORM) simplifies database interactions by mapping Python objects to database tables. One of the key features of Django's ORM is migrations, which allow you to manage changes to the database schema.What are Migrations in Django?Migrations are files that store instru
4 min read
Add the slug field inside Django Model The slug field within Django models is a pivotal step for improving the structure and readability of URLs in web applications. This addition allows developers to automatically generate URL-friendly slugs based on titles, enhancing user experience and search engine optimization (SEO). By implementing
4 min read
Intermediate fields in Django - Python Prerequisite: Django models, Relational fields in DjangoIn Django, a many-to-many relationship is used when instances of one model can be associated with multiple instances of another model and vice versa. For example, in a shop management system:A Customer can purchase multiple Items.An Item can be
2 min read
Uploading images in Django - Python Prerequisite - Introduction to DjangoUploading and managing image files is a common feature in many web applications, such as user profile pictures, product images, or photo galleries. In Django, you can handle image uploads easily using the ImageField in models.In this article, weâll walk through a
3 min read
Customize Object Names with __str__ Method When you create instances of a Django model, by default, they appear in the Django admin interface and elsewhere as "ModelName object (1)" (or a similar format). This can make it hard to identify records, especially when you have many objects.Why Customize Object Display Names?By default, Django doe
2 min read
Custom Field Validations in Django Models Field validation ensures that the data entered into a model field meets specific rules before itâs saved to the database. While Django provides built-in validations for common checks, custom field validation lets you enforce your own rules, such as verifying formats, length limits, or complex condit
3 min read
Meta Class in Models - Django Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. Itâs free and open source. D
3 min read
How to use Django Field Choices ? Djangoâs choices option lets you limit a model field to a fixed set of values. It helps keep your data clean and consistent, and automatically shows a dropdown menu in forms and the admin instead of a text box.Choices are defined as pairs: the first value is saved to the database, and the second is
2 min read