EU TENHO QUE VALIDAR DIRETO NO MODELO?
EU TENHO QUE VALIDAR DIRETO NO MODELO?
Oii Endrew, como você está?
Peço desculpas pela demora em obter um retorno.
Para criarmos uma validação no formulário presente no painel admin do Django, será necessário realizarmos a implementação do método clean()
na classe Cliente
presente no arquivo clientes/models.py. Esse método é responsável por persistir as validações dentro do modelo do Django, pois, da forma como foi apresentado no curso as validações serão válidas apenas para as rotas cadastradas da API via interface do site e não no admin.
Podemos fazer o uso das lógicas de validação presentes no arquivo clientes.validators.py, para isso faremos a importação das validações, e para elevação da mensagem de erro, usaremos a função ValidationError
do django.forms
.
No arquivo clientes/models.py adicione as novas importações.
from clientes.validators import *
from django.forms import forms
Na classe 'Cliente' iremos adicionar o método clean
, abaixo um exemplo usando a validação do campo CPF, onde passamos o atributo self.cpf
como parâmetro para a função cpf_valido()
.
def clean(self):
if not cpf_valido(self.cpf):
raise forms.ValidationError({'cpf':'O CPF deve conter 11 dígitos'})
Para novas validações, basta adicioná-las dentro do método clean
. Deixo abaixo um exemplo que contém a validação dos campos CPF, nome e RG.
from django.db import models
from clientes.validators import *
from django.forms import forms
class Cliente(models.Model):
nome = models.CharField(max_length=100)
email = models.EmailField(blank=False, max_length=30, )
cpf = models.CharField(max_length=11, unique=True)
rg = models.CharField(max_length=9)
celular = models.CharField(max_length=14)
ativo = models.BooleanField()
def __str__(self):
return self.nome
def clean(self):
if not cpf_valido(self.cpf):
raise forms.ValidationError({'cpf':'O CPF deve conter 11 dígitos'})
if not nome_valido(self.nome):
raise forms.ValidationError({'nome':"Não inclua números neste campo"})
if not rg_valido(self.rg):
raise forms.ValidationError({'rg':"O RG deve ter 9 dígitos"})
Com isso, ao adicionar um CPF inválido no Admin, será apresentado o erro O CPF deve conter 11 dígitos
, como mostro abaixo:
Qualquer dúvida fico à disposição.
Abraços e bons estudos!