Subjects

All subjects Django Java Python React Spring Boot JavaScript PHP
Sign Up Free
Question 5 of 9 · Django Forms & Validation
Interview question

How do you use Django's built-in validators and create custom field validators? Django के built-in validators कैसे use करें और custom field validators कैसे बनाएं?

Answer

Validators are callables that raise ValidationError if a value doesn't meet a condition. Django ships several built-in ones and lets you attach custom validators to any form or model field.

from django.core.validators import MinLengthValidator, MaxValueValidator, RegexValidator
from django.core.exceptions import ValidationError
from django import forms

# Built-in validators applied directly to a field
class BookForm(forms.Form):
    title = forms.CharField(validators=[MinLengthValidator(3)])
    rating = forms.IntegerField(validators=[MaxValueValidator(5)])
    isbn = forms.CharField(validators=[
        RegexValidator(r'^\d{3}-\d{10}$', 'Enter a valid ISBN (XXX-XXXXXXXXXX)')
    ])

# CUSTOM validator function - a standalone callable
def validate_even(value):
    if value % 2 != 0:
        raise ValidationError(f'{value} is not an even number')

class QuantityForm(forms.Form):
    quantity = forms.IntegerField(validators=[validate_even])

# Custom validator with a configurable message
def validate_no_profanity(value):
    banned_words = ['spam', 'scam']
    for word in banned_words:
        if word in value.lower():
            raise ValidationError(
                '%(value)s contains inappropriate content',
                params={'value': value},
            )

# Applying a custom validator on a MODEL field (reused everywhere the model is used)
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200, validators=[validate_no_profanity])

# Model field validators run when full_clean() is called
# (automatically via ModelForm, or manually):
book = Book(title='spam book')
try:
    book.full_clean()  # triggers all field validators
except ValidationError as e:
    print(e.message_dict)

# Combining multiple validators on one field
class PasswordForm(forms.Form):
    password = forms.CharField(validators=[
        MinLengthValidator(8),
        RegexValidator(r'\d', 'Password must contain at least one digit'),
    ])

Validators callables हैं जो value condition पूरी न करने पर ValidationError raise करते हैं। Django कई built-in validators देता है और custom validators किसी भी form/model field पर attach हो सकते हैं।

from django.core.validators import MinLengthValidator, MaxValueValidator, RegexValidator
from django.core.exceptions import ValidationError
from django import forms

class BookForm(forms.Form):
    title = forms.CharField(validators=[MinLengthValidator(3)])
    rating = forms.IntegerField(validators=[MaxValueValidator(5)])
    isbn = forms.CharField(validators=[
        RegexValidator(r'^\d{3}-\d{10}$', 'सही ISBN डालें')
    ])

# Custom validator function
def validate_even(value):
    if value % 2 != 0:
        raise ValidationError(f'{value} even number नहीं है')

class QuantityForm(forms.Form):
    quantity = forms.IntegerField(validators=[validate_even])

def validate_no_profanity(value):
    banned_words = ['spam', 'scam']
    for word in banned_words:
        if word in value.lower():
            raise ValidationError(
                '%(value)s में inappropriate content है',
                params={'value': value},
            )

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200, validators=[validate_no_profanity])

book = Book(title='spam book')
try:
    book.full_clean()
except ValidationError as e:
    print(e.message_dict)

Was this answer clear?