1
resposta

Validação na página Admin -> Não funciona

Bom dia,

  • Quando add um novo cliente pela página da API_ROOT os filtros funcionam perfeitamente, conforma apresentado na imagem abaixo: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

  • Porem quando add o cliente via página do Admin os filtros simplesmente não funcionam, deixando o usuario ser cadastrado na base de dados.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como posso resolver esse problema e fazer o filtro funcionar tambem na página do admin?

1 resposta

Oii Guilherme, 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!