Un validador es una función llamable que toma un valor y levanta una ValidationError si no cumple con algunos criterios. Los validadores pueden ser útiles para reutilizar la lógica de validación entre diferentes tipos de campos.
Por ejemplo, aquí tienes un validador que solo permite números pares:
from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_even(value):
if value % 2 != 0:
raise ValidationError(
_("%(value)s is not an even number"),
params={"value": value},
)
Puedes agregar esto a un campo de modelo mediante el argumento validators del campo:
from django.db import models
class MyModel(models.Model):
even_field = models.IntegerField(validators=[validate_even])
Because values are converted to Python before validators are run, you can even use the same validator with forms:
from django import forms
class MyForm(forms.Form):
even_field = forms.IntegerField(validators=[validate_even])
Puedes utilizar también una clase con un método __call__() para validadores más complejos o configurables. Por ejemplo, la clase RegexValidator utiliza esta técnica. Si se utiliza un validador basado en clases en la opción de campo del modelo validators, asegúrate de que sea serializable por el marco de migración agregando los métodos deconstruct() y __eq__().
Consulte la documentación sobre validación de formularios para obtener más información sobre cómo se ejecutan los validadores en formularios, y Validando objetos para saber cómo se ejecutan en modelos. Ten en cuenta que no se ejecutarán los validadores automáticamente cuando guardes un modelo, pero si estás utilizando una ModelForm, ejecutará tus validadores en cualquier campo que incluyas en tu formulario. Consulta la documentación sobre ModelForm para obtener información sobre cómo interactúa la validación de modelos con los formularios.
El módulo django.core.validators contiene una colección de validadores llamables para uso con campos de modelo y formulario. Se utilizan internamente pero están disponibles para su uso en sus propios campos. Pueden usarse además o en lugar de métodos field.clean() personalizados.
RegexValidator¶regex – Si no es None, sobrescribe regex. Puede ser una cadena de expresión regular o una expresión regular pre-compilada.
message – Si no es None, sobrescribe message.
code – Si no es None, sobrescribe code.
inverse_match – Si no es None, sobreescribe inverse_match.
flags – Si no es None, sobreescribe flags. En ese caso, regex debe ser una cadena de expresión regular o se levanta un TypeError.
Una instancia de RegexValidator busca la expresión regular proporcionada en el value con re.search(). Por defecto, lanza un ValidationError con message y code si no se encuentra una coincidencia. Su comportamiento puede invertirse estableciendo inverse_match a True, en cuyo caso el ValidationError se lanza cuando se encuentra una coincidencia.
La cadena de expresión regular para buscar dentro del value proporcionado, utilizando re.search(). Puede ser una cadena o una expresión regular pre-compilada creada con re.compile(). Por defecto es la cadena vacía, que se encontrará en cada posible value.
El mensaje de error utilizado por el ValidationError si falla la validación. Por defecto es "Enter a valid value".
El código de error utilizado por el ValidationError si falla la validación. Por defecto es "invalid".
EmailValidator¶An Validador de Correo Electrónico asegura que un valor tenga el formato de un correo electrónico y lanza una ValidationError con mensaje y código si no lo tiene. Los valores más largos que 320 caracteres siempre se consideran inválidos.
El mensaje de error utilizado por ValidationError cuando la validación falla. Por defecto, es "Ingrese una dirección de correo electrónico válida".
El código de error utilizado por el ValidationError si falla la validación. Por defecto es "invalid".
Lista blanca de dominios de correo electrónico. Por defecto, se utiliza una expresión regular (la atributo domain_regex) para validar lo que aparece después del signo @. Sin embargo, si esa cadena aparece en la lista blanca, esta validación se bypassa. Si no se proporciona, la lista blanca por defecto es ['localhost']. Los dominios que no contienen un punto no pasarán la validación, por lo que necesitarás agregarlos a la lista blanca según sea necesario.
Validador de Nombre de Dominio¶Una subclase RegexValidator que asegura que un valor tenga el formato de un nombre de dominio. Los valores más largos que 255 caracteres siempre se consideran inválidos. Las direcciones IP no se aceptan como nombres de dominios válidos.
Además de los argumentos opcionales de la clase padre RegexValidator, DomainNameValidator acepta un atributo adicional opcional:
Determina si aceptar nombres de dominio internacionalizados, es decir, nombres de dominio que contienen caracteres no ASCII. Por defecto, es True.
Validador de URL¶Una subclase RegexValidator que asegura que un valor tenga el formato de una URL y lanza un código de error de 'invalid' si no lo tiene. Los valores más largos que max_length caracteres siempre se consideran inválidos.
Las direcciones IP de bucle de vuelta y los espacios reservados de IP se consideran válidos. Las direcciones IPv6 literales (RFC 3986 Section 3.2.2) y los dominios Unicode también están soportados.
Además de los argumentos opcionales de su clase padre RegexValidator, la clase URLValidator acepta un atributo adicional opcional:
Lista del esquema URL/URI a validar en contra. Si no se proporciona, la lista por defecto es ['http', 'https', 'ftp', 'ftps']. Como referencia, el sitio web de IANA proporciona una lista completa de esquemas URI válidos.
Advertencia
Los valores que comienzan con file:/// no pasarán la validación incluso cuando se proporciona el esquema file. Los valores válidos deben contener un host.
La longitud máxima de los valores que podrían considerarse válidos. Por defecto, es 2048 caracteres.
validate_email¶Una instancia de EmailValidator sin personalizaciones.
validate_domain_name¶Una instancia de DomainNameValidator sin personalizaciones.
validate_slug¶Una instancia de RegexValidator que asegura que un valor consiste solo en letras, números, guiones bajos o guiones.
valida_unicode_slug¶Una instancia de RegexValidator que asegura que un valor consiste solo en letras Unicode, números, guiones bajos o guiones.
validate_ipv4_address¶Una instancia de RegexValidator que asegura que un valor tiene el formato de una dirección IPv4.
validate_ipv6_address¶validate_ipv46_address¶validate_comma_separated_integer_list¶Una instancia de RegexValidator que asegura que un valor es una lista separada por comas de enteros.
Devuelve una instancia de RegexValidator que asegura que una cadena consiste en enteros separados por sep. Permite números negativos cuando allow_negative es True.
MaxValueValidator¶Lanza un error de validación ValidationError con el código 'max_value' si value es mayor que limit_value, que puede ser una función llamable.
MinValueValidator¶Lanza un error de validación ValidationError con el código 'min_value' si value es menor que limit_value, que puede ser una función llamable.
MaxLengthValidator¶Lanza un error de validación ValidationError con el código 'max_length' si la longitud de value es mayor que limit_value, que puede ser una función llamable.
MinLengthValidator¶Lanza un error de validación ValidationError con el código 'min_length' si la longitud de value es menor que limit_value, que puede ser una función llamable.
DecimalValidator¶Lanza una ValidationError con los siguientes códigos:
'max_digits' si el número de dígitos es mayor que max_digits.
'max_decimal_places' si el número de decimales es mayor que decimal_places.
'max_whole_digits' si el número de dígitos enteros es mayor que la diferencia entre max_digits y decimal_places.
FileExtensionValidator¶Lanza una ValidationError con un código de 'invalid_extension' si la extensión de value.name (value es una File) no se encuentra en allowed_extensions. La extensión se compara sin distinguir entre mayúsculas y minúsculas con allowed_extensions.
Advertencia
No te fíes de la validación de la extensión del archivo para determinar el tipo de archivo. Los archivos pueden renombrarse para tener cualquier extensión, independientemente del contenido que contengan.
validate_image_file_extension¶Utiliza Pillow para asegurarse de que value.name (value es una File) tenga una extensión de imagen válida.
ProhibitNullCharactersValidator¶Lanza una ValidationError si str(value) contiene uno o más caracteres nulos ('\x00').
El mensaje de error utilizado por la ValidationError en caso de que la validación falla. Por defecto es "No se permiten caracteres nulos.".
El código de error utilizado por la ValidationError en caso de que la validación falla. Por defecto es "caracteres_nulos_no_permitidos".
StepValueValidator¶Lanza una ValidationError con un código de 'step_size' si value no es un múltiplo integral de limit_value, que puede ser un valor flotante, entero o decimal o una función. Cuando se establece offset, la validación ocurre contra limit_value más offset. Por ejemplo, para StepValueValidator(3, offset=1.4) los valores válidos incluyen 1.4, 4.4, 7.4, 10.4, y así sucesivamente.
may 31, 2026