Validaciones de campos personalizados en modelos de Django

Este artículo gira en torno a cómo agregar una validación personalizada a un campo en particular. Por ejemplo, para agregar la validación de un correo electrónico a un CharField especificando un formato particular. Puede haber varias formas de lograr una validación personalizada. En este artículo, lo mostraremos desde el propio modelo para que no necesite manipularlo en ningún otro lugar. 
Estas validaciones se ejecutan cuando intenta crear una instancia de un modelo. Técnicamente, esta validación se implementa después de ejecutar ModelName.objects.create(data = data).

Sintaxis –

field_name = models.Field(validators = [function 1, function 2]) 

Explicación de la validación del campo personalizado de Django

Ilustración de validadores utilizando un ejemplo. Considere un proyecto llamado geeksforgeeks que tenga una aplicación llamada geeks.  

Consulte los siguientes artículos para comprobar cómo crear un proyecto y una aplicación en Django. 

Ingrese el siguiente código en el archivo models.py de la aplicación geeks . Usaremos CharField para experimentar con todas las opciones de campo.  

Python3

from django.db import models
from django.db.models import Model
# Create your models here.
 
class GeeksModel(Model):
    geeks_mail = models.CharField(
                    max_length = 200, 
                    )

Ahora aplicaremos una validación personalizada para que el campo anterior se valide solo para las ID de correo de Google. Cree una función que acepte un argumento llamado valor . Ahora se puede aplicar cualquier tipo de operación sobre el valor. así que verifiquemos si el valor de nuestra función contiene @gmail.com para ser validado solo para las ID de correo de Google. 

Python3

from django.db import models
# importing validationerror
from django.core.exceptions import ValidationError
 
# creating a validator function
def validate_geeks_mail(value):
    if "@gmail.com" in value:
        return value
    else:
        raise ValidationError("This field accepts mail id of google only")
 
 
# Create your models here.
class GeeksModel(models.Model):
    geeks_mail = models.CharField(max_length = 200)

Ahora agreguemos esta función como validador en nuestro campo. Tenga en cuenta que una función de validación se puede utilizar para varios campos simultáneamente. 

Python3

from django.db import models
# importing validationerror
from django.core.exceptions import ValidationError
 
# creating a validator function
def validate_geeks_mail(value):
    if "@gmail.com" in value:
        return value
    else:
        raise ValidationError("This field accepts mail id of google only")
 
 
# Create your models here.
class GeeksModel(models.Model):
    geeks_mail = models.CharField(
                         max_length = 200,
                         validators =[validate_geeks_mail]
                         )

Intentemos crear una instancia sin gmail.com y verifiquemos si nuestra validación funcionó o no. Tenga en cuenta que después de cada cambio en models.py, es necesario ejecutar los comandos makemigrations y migrate. 
En su navegador, vaya a http://localhost:8000/admin/geeks/geeksmodel/add/ e ingrese “abc@geeksforgeeks.org”. 

Verifiquemos si se guarda en la base de datos. 

custom-field-validations-django-models

Entonces, la validación funcionó y este campo solo puede aceptar ID de correo electrónico que terminen en @gmail.com. De esta manera, se puede aplicar cualquier tipo de validación personalizada sobre el valor.
 

Publicación traducida automáticamente

Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *