1
resposta

Validate não funciona

Ja fiz e refiz várias vezes o código e o validate continua sem fazer efeito no código.

Serializer:

from rest_framework import serializers
from clientes.validators import *
from clientes.models import Cliente


class ClienteSerializer(serializers.ModelSerializer):
    class Meta:
        model = Cliente
        fields = '__all__'

    def validate(self, data):
        if not cpf_valido(data['cpf']):
            raise serializers.ValidationError({'cpf': "O CPF deve ter 11 dígitos."})
        if not nome_valido(data['nome']):
            raise serializers.ValidationError({'nome': "Não inclua números neste campo."})
        if not rg_valido(data['rg']):
            raise serializers.ValidationError({'rg': "O RG deve ter 9 dígitos."})
        if celular_valido(data['celular']):
            raise serializers.ValidationError(
                {'celular': "O número do celular deve seguir este modelo: 99 99999-9999."})
        return data

Validators:

def cpf_valido(numero_do_cpf):
    return len(numero_do_cpf) == 11


def nome_valido(nome):
    return nome.isalpha()


def rg_valido(numero_do_rg):
    return len(numero_do_rg) == 9


def celular_valido(numero_celular):
    return numero_celular

Ao digitar respostas inválidas:

1 resposta

Oiii Bruno, tudo bem?

Obrigada pela paciência em esperar um retorno :)

Muito bom o seu código! Acontece que durante o processo de autenticação, segue-se uma ordem a ser verificada de acordo com o código. O email, por ser models.EmailField deve-se seguir um formato de email. Dessa maneira, é o primeiro a ser verificado. Se você colocar no campo um email qualquer, teremos a seguinte resposta:

 Imagem com fundo branco com 5 caixas de opções disponíveis sendo elas: Nome, Email, CPF, RG, Número, com os títulos escritos em preto. Logo abaixo apresenta uma caixa de seleção pequena com o nome “Ativo” escrito do lado direito. No canto superior direito tem as abas “Raw Data” e “HTML Form”. No canto inferior direito temos um botão azul com letra branca escrito “POST”. Na caixa de opções do CPF tem a frase em vermelho escrita “O CPF deve ter 11 dígitos”

Se você observar a sua ordem de validação, ela segue: CPF -> Nome -> RG -> Número, ou seja, o CPF era o próximo, depois de email, a ser verificado. Se você colocar um CPF válido, o próximo será o nome e assim por diante. Dessa maneira, o seu código está funcionando corretamente :)

Caso, mesmo fazendo a alteração do email para um formato válido o erro persista, peço que compartilhe seu projeto completo aqui para eu possa te ajudar!

Em caso de dúvidas, me coloco à disposição.

Grande abraço e bons estudos!

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