1
resposta

[Bug] Validation Error não está sendo exibido

Olá, minhas mensagens do formulário, que são lançadas com raise forms.ValidationError(), não estão aparecendo na tela de formulário, segue os códigos abaixo: html:

{% for field in cadastro.visible_fields %}
    <div class="inputContainer">
      <label class="forms__label" for="{{field.id_for_label}}" class="inputText">{{field.label}}</label>
      {{field}}
      {% for error in field.errors %}
        <div class="alert alert-danger">
            {{error}}
        </div>
        {% endfor %}
    </div>
  {% endfor %}

forms.py

class CadastroForm(forms.Form):
  email = forms.EmailField(
    max_length=100,
    required=True,
    label='Email',
    widget=forms.TextInput({
      "class": 'forms__input',
      "placeholder": "exemplo@gmail.com",
    })
  )
  nome_de_usuario = forms.CharField(
    max_length=100,
    required=True,
    label="Nome de usuário",
    widget=forms.TextInput({
      "class": 'forms__input',
      "placeholder": "Ex.: Jóse Dávila",
    })
  )
  senha = forms.CharField(
    max_length=70,
    required=True,
    label="Senha",
    widget=forms.PasswordInput({
      "id": "userPasswordInput",
      "class": 'forms__input',
      "placeholder": "Exemplo1234+",
    })
  )
  senha2 = forms.CharField(
    max_length=70,
    required=True,
    label="Confirme sua senha",
    widget=forms.PasswordInput({
      "id": "userPasswordInput",
      "class": 'forms__input',
      "placeholder": "Exemplo1234+",
    })
  )


  def clean_senha2(self):
    senha = self.cleaned_data.get('senha')
    senha2 = self.cleaned_data.get('senha2')

    if senha and senha2:
        if senha != senha2:
            raise forms.ValidationError('Senhas não são iguais')
        else:
            return senha2

views.py

def cadastrar(request):

  if request.user.is_authenticated:
    return redirect('inicio')

  cadastro_form = forms.CadastroForm()

  if request.method == 'POST' and request.POST:
    respostas_form = forms.CadastroForm(request.POST)
    cadastro_result = cadastrar_usuario(request, respostas_form)
    if cadastro_result: return cadastro_result

  return render(request, 'usuarios/cadastrar.html', {
    "cadastro": cadastro_form,
  })

função cadastrar_usuario

def cadastrar_usuario(request, respostas_form:CadastroForm):
  if respostas_form.is_valid():

    nome = respostas_form['nome_de_usuario'].value()
    email = respostas_form['email'].value()
    # nascimento = respostas_form['nascimento'].value()
    senha = respostas_form['senha'].value()

    if User.objects.filter(email=email).exists():
      messages.error(request, " Já existe um usuário cadastrado com esse email!!")
      return redirect('cadastrar')

    if User.objects.filter(username=nome).exists():
      messages.error(request, " Já existe um usuário cadastrado com esse nome!!")
      return redirect('cadastrar')

    usuario = User.objects.create_user(password=senha, username=nome, email=email)
    usuario.save()

    messages.success(request, f"Olá {nome}, seu cadastro foi efetuado com sucesso!")
    return redirect('entrar')
1 resposta

Olá Antonio, como você está?

Peço desculpas pela demora em obter um retorno.

A não exibição da mensagem de erro está relacionado com a criação dos campos visíveis do formulário criado no arquivo cadastro.html, no código enviado os campos estão sendo criados a partir de cadastro.visible_fields o correto será: form.visible_fields. Além disso, será necessário modificar e adicionar novas tags <div>.

Deixo abaixo o código completo com as mudanças já aplicadas:

<div class="row">
{% for field in form.visible_fields %}
    <div class="inputContainer">
    <label class="forms__label" for="{{field.id_for_label}}" class="inputText">{{field.label}}</label>
    {{field}}
    </div>
    {% for error in field.errors %}
        <div class="alert alert-danger">
            {{error}}
        </div>
        {% endfor %}
        {% endfor %}
    </div>
<div>

Após as mudanças aplicadas acima, salve o arquivo cadastro.html. Inicie novamente a aplicação. Acesse a página de cadastro, realize a tentativa de criação de usuário usando um nome com espaços e verifique se o erro é apresentado.

Os testes forma executados em conjunto com o código do curso, caso o erro permaneça. Peço que compartilhe seu projeto completo, basta disponibilizar seu projeto em um site de compartilhamento (exemplo: Google Drive) e enviar o link de compartilhamento na resposta desta postagem.

Espero ter lhe ajudado. Em caso de dúvidas estou à disposição.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

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