1
resposta

[Bug] Validação no nome_cadastro não está funcionando

Depois de colocar o seguinte código no forms.py:

def clean_nome_cadastro(self):
        nome = self.cleaned_data.get("nome_cadastro")
        print("Cleaning nome_cadastro", nome)
        if nome:
            nome = nome.strip()
            if " " in nome:
                print(nome, "Raise Validation")
                raise forms.ValidationError("Não é possível inserir espaços dentro do campo usuário")
            else:
                print(nome, "Retorna Nome")
                return nome

O instrutor mostra que ao cadastrar a usuário "Carol Silva" o cadastro não aparece no banco de dados. Porém para mim o cadastro continua sendo efetuado. Eu coloquei os prints para fazer um troubleshoot, e parece que a função é chamada, e a condicional está certa (ou seja, o print(nome, "Raise Validation") aparece na tela, então me leva a crer que é algo com o raise ValidationError, mas não consegui descobrir o problema.

1 resposta

Olá, Armando!

Aparentemente, o seu código parece estar correto. A função clean_nome_cadastro está sendo chamada e a validação também está sendo acionada, como você mencionou que o print "Raise Validation" aparece na tela.

O problema pode estar relacionado à maneira como o Django está lidando com o ValidationError. No Django, quando um ValidationError é acionado dentro de um método clean_<fieldname>, ele é associado àquele campo específico e, se não for tratado, o formulário será considerado inválido.

Você pode verificar se o formulário é válido após a chamada do método is_valid(). Se o formulário for inválido, você pode imprimir os erros do formulário para ver o que está acontecendo. Aqui está um exemplo de como você pode fazer isso:

form = MyForm(request.POST)
if form.is_valid():
    # processa o formulário
else:
    print(form.errors)

Se você ver o erro "Não é possível inserir espaços dentro do campo usuário" na saída, isso significa que a validação está funcionando corretamente, mas por algum motivo, o cadastro ainda está sendo efetuado. Nesse caso, você deve verificar a lógica que está processando o formulário e salvando o cadastro no banco de dados.