2
respostas

As validações não surtem efeito ao colocar o numero do CPF, RG ou o nome do cliente

Já fiz, refiz de tudo e as validações não estão acontecendo. Se coloco número no nome, ou se digito CPF e RG com apenas um dígito as mensagens não aparecem.

2 respostas

Meu validators:

import re

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): """Verifica se o celular é válido (1191234-1234)""" modelo = '[0-9]{2} [0-9]{5}-[0-9]{4}' resposta = re.findall(modelo, numero_celular) return resposta

Meu serializer:

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

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

Oi Rogério, como vai?

Muito obrigado por compartilhar o seu código. Pode por gentileza realizar o seguinte teste:

  • A única diferença do seu código para o código da aula se encontra no campo fields. O seu não possui os 2 underline antes e depois, como mstra o exemplo abaixo:

fields = '__all__'

Faz um teste e nos diz se deu certo?

Conte sempre com a Alura e bons estudos.

: )