1
resposta

Validate cpf

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

    def validate_cpf(self, cpf):
        if len(cpf) != 11:
            raise serializers.ValidationError("O cpf deve ter 11 digitos")
        return cpf   

referente a esse trecho, o serializer entende que a validação, deve ser feita no campo cpf apenas por que o parametro "cpf" tem o mesmo nome que o atributo da model ? no caso, "cpf" tambem?

ou seja, para realizar essa validação, devo sempre passar como parametro o mesmo nome que está no meu modelo?

1 resposta

Olá Lucas, como você está?

Peço desculpas pela demora em obter um retorno.

É exatamente isso, seu raciocínio foi excelente, o reconhecimento do campo a ser validado será feito através do nome usado para declaração de uma validação customizada.

Quando criamos validações customizadas para o serializer do REST framework, devemos seguir um padrão de sintaxe, para que nossa validação seja reconhecida.

Deixo abaixo a representação de como devemos realizar a declaração.

def validate_<nome_do_campo>(self, <valor_do_campo>):
    # validação 

Por padrão, o nome da validação customizada deve iniciar com validate_ seguido do nome do campo que será validado e como atributo receberá a instância (self) e o valor registrado no campo informado (<valor_do_campo>).

Para a estrutura da validação, devemos criar uma elevação de erro (raise) caso o valor não passe na validação desejada, devendo elevar a função serializers.ValidationError. Caso o valor passe na validação, o valor do campo deve ser retornado.

def validate_cpf(self, cpf):
        if len(cpf) != 11:
            raise serializers.ValidationError("O cpf deve ter 11 digitos")
        return cpf   

Analisando o código utilizado na aula, temos todas as estruturas que são necessárias para a criação de uma validação customizada, onde demos:

  • Declaração do campo que será validado e a coleta do valor do campo:
    • def validate_cpf(self, cpf):
  • Validação do campo:
    • if len(cpf) != 11:
  • Elevação de erro caso o valor não passe na validação:
    • raise serializers.ValidationError("O cpf deve ter 11 digitos")
  • Retorno do valor do campo caso passe na validação:
    • return cpf

Caso queira conhecer um pouco mais sobre as validações customizadas dos serializer, recomendo a leitura do seguinte artigo.

O conteúdo recomendado acima está em inglês, o uso da língua inglesa é bem comum na área de tecnologia, mas caso não tenha afinidade com essa linguagem, recomendo que utilize o tradutor do navegador para uma melhor compressã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!