Как показать сообщения об ошибках при регистрации?

Как показать сообщения об ошибках при регистрации? Я пытался сделать сообщение об ошибке при заполнении поля регистрации. Но это не работает. то есть, когда я ввожу неправильные данные, сообщение об ошибке не появляется. в чем может быть проблема? и как ее решить??

forms.py

class UserRegistrationForm(forms.ModelForm):
    
    class Meta:
        model = User
        fields = ("username", "email", "password", )

    def clean_username(self):
        username = self.cleaned_data.get('username')
        model = self.Meta.model
        user = model.objects.filter(username__iexact=username)
        
        if user.exists():
            raise forms.ValidationError("A user with that name already exists")
        
        return self.cleaned_data.get('username')

    def clean_email(self):
        email = self.cleaned_data.get('email')
        model = self.Meta.model
        user = model.objects.filter(email__iexact=email)
        
        if user.exists():
            raise forms.ValidationError("A user with that email already exists")
        
        return self.cleaned_data.get('email')


    def clean_password(self):
        password = self.cleaned_data.get('password')
        confim_password = self.data.get('confirm_password')
        
        if password != confim_password:
            raise forms.ValidationError("Passwords do not match")

        return self.cleaned_data.get('password')

views.py

def register_user(request):
    form = UserRegistrationForm()
    
    if request.method == "POST":
        form = UserRegistrationForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.set_password(form.cleaned_data.get('password'))
            user.save()
            messages.success(request, "Registration sucessful")
            return redirect('login')
    
    context = {
        "form": form
    }
    return render(request, 'registration.html')

registration.html

 <fieldset>
                            <input name="username"  type="text" id="username_id" placeholder="Your username" >
                            <p class="py-1 text-danger errors">{{form.username.errors}}</p>
                          </fieldset>
                        </div>
                        <div class="col-md-12 col-sm-12">
                            <fieldset>
                              <input name="email" type="email" id="email_id" placeholder="Your email" >
                            <p class="py-1 text-danger errors">{{form.email.errors}}</p>
                            </fieldset>
                          </div>
                          <div class="col-md-12 col-sm-12">
                            <fieldset>
                              <input name="password" type="password" id="password_id" placeholder="Your password" >
                              <p class="py-1 text-danger errors">{{form.password.errors}}</p>
                            </fieldset>

Как обсуждается в разделе рендеринга полей вручную документации ,

для полей вы также должны вывести {{ field.errors }}, и {{ form.non_field_errors }}, который работает с ошибками, не специфичными для одной формы.

Таким образом, шаблон должен выглядеть следующим образом:

<form action= "" method="post">
  {% csrf_token %}
  {{ form.non_field_errors }}
  {% for field in form %}
    <p>
      {{ field.errors }}
      {{ field.label }}
      {{ field }}
    </p>
  {% endfor %}
  <button type="submit" class="btn btn-success">Create User</button>
</form>

В разделе также обсуждается, как перечислить ошибки и применить определенные стили к этим ошибкам.

На это уже отвечал @Willem Van Onsem

поскольку вы используете ValidationError тогда вы можете отобразить это в views:

if request.method == "POST":
        form = UserRegistrationForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.set_password(form.cleaned_data.get('password'))
            user.save()
            messages.success(request, "Registration sucessful")
            return redirect('login')
        else:
            messages.error(request, form.errors) # Innovation
Вернуться на верх