1
resposta

PRA VALIDAR NO ADMIN EU TENHO QUE VALIDAR DIRETO NO MODELO?

EU TENHO QUE VALIDAR DIRETO NO MODELO?

1 resposta

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:

Início da transcrição. Imagem da tela do painel admin do django, nessa imagem temos o formulário de cadastro de usuário, o usuário forneceu um CPF que contém menos de 11 dígitos, recebendo uma mensagem de erro estrito “O CPF deve conter 11 dígitos.” Final da transcrição.

Qualquer dúvida fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!