Este artigo gira em torno de como adicionar validação personalizada a um campo específico. Por exemplo, para adicionar a validação de um e-mail a um CharField especificando um formato particular. Pode haver várias maneiras de obter validação personalizada. Neste artigo, vamos mostrá-lo a partir do próprio modelo para que você não precise manipulá-lo em outro lugar.
Essas Validações são executadas quando você tenta criar uma instância de um modelo. Tecnicamente, essa validação é implementada após a execução ModelName.objects.create(data = data).

Sintaxe -

field_name = models.Field (validadores = [função 1, função 2])

Explicação da validação do campo personalizado do Django

Ilustração de validadores usando um exemplo. Considere um projeto denominado geeksforgeekscom um aplicativo denominado geeks.

Consulte os artigos a seguir para verificar como criar um projeto e um aplicativo no Django.

Digite o seguinte código no models.pyarquivo do aplicativo geeks . Estaremos usando CharField para experimentar todas as opções de campo.



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

Agora vamos aplicar uma validação personalizada para que o campo acima seja validado apenas para IDs do Google Mail. Crie uma função que aceite um argumento denominado valor . Pode-se aplicar qualquer tipo de operação em valor agora. portanto, vamos verificar se o valor da nossa função contém @ gmail.com para ser validado apenas para IDs do google mail.

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

Agora vamos adicionar esta função como um validador em nosso campo. Observe que uma função de validador pode ser usada para vários campos simultaneamente.

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

Vamos tentar criar uma instância sem gmail.com e verificar se nossa validação funcionou ou não. Observe que, após cada alteração em models.py, é necessário executar makemigrations e migrar comandos.
Em seu navegador, vá para http: // localhost: 8000 / admin / geeks / geeksmodel / add / e digite “abc@geeksforgeeks.org”.
Vamos verificar se ele foi salvo no banco de dados.
custom-field-validations-django-models
Portanto, a validação funcionou e este campo só pode aceitar ids de e-mail terminando com @ gmail.com. Desta forma, pode-se aplicar qualquer tipo de validação personalizada no value.