Django-widget-tweaks ошибки при валидации формы
Использую Django-widget-tweaks для рендера формы в html. Столкнулся со следующей проблемой. Форма отображается корректно, но при отправке на сервер, если форма не прошла проверку, не отображаются допущенные ошибки. Если не пользоваться Django-widget-tweaks то все в порядке, ошибки появляются.
views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import register
def registration(request):
if request.method == "POST":
form = register(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Аккаунт {username} был создан, введите имя пользователя и пароль для авторизации')
return redirect('main')
else:
form = register()
return render(request, 'users/registration.html', {'form': form, 'title':'Регистрация пользователя'})
forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class register(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'password1', 'password2', 'email']
html шаблон
{% extends 'main/base.html' %}
{% load widget_tweaks %}
{% block main_section %}
<div class="title">Авторизация</div>
<form method="POST" class="main-form">
{% csrf_token %}
<div class="form-item">
<label for="id_username" class="form-label">Введите логин</label>
{% render_field form.username class="form-input" placeholder="Введите имя"%}
</div>
<div class="form-item">
<label for="id_password" class="form-label">Введите пароль</label>
{% render_field form.password class="form-input" placeholder="Введите пароль"%}
</div>
<div class="center">
<button type="submit" class="btn-submit">Войти</button>
<p>Забыли пароль? <a href="{% url 'auth' %}">Восстановить</a></p>
</div>
</form>
</div>
{% endblock %}
Ответы (2 шт):
Автор решения: Sherlock
→ Ссылка
Вы должны выводить ошибки вручную.
Данный код выведет все ошибки в одном месте:
{% extends 'main/base.html' %}
{% load widget_tweaks %}
{% block main_section %}
<div class="title">Авторизация</div>
<form method="POST" class="main-form">
{% csrf_token %}
<div class="form-item">
<label for="id_username" class="form-label">Введите логин</label>
{% render_field form.username class="form-input" placeholder="Введите имя"%}
</div>
<div class="form-item">
<label for="id_password" class="form-label">Введите пароль</label>
{% render_field form.password class="form-input" placeholder="Введите пароль"%}
</div>
{% for error in form.errors %}
{{ error }}
{% endfor %}
<div class="center">
<button type="submit" class="btn-submit">Войти</button>
<p>Забыли пароль? <a href="{% url 'auth' %}">Восстановить</a></p>
</div>
</form>
</div>
{% endblock %}
Если хотите, что бы ошибки выводились над каждым полем, то ошибки обрабатывать так:
<div class="form-item">
{% if form.username.errors %} {{ form.username.errors }} {% endif %}
<label for="id_username" class="form-label">Введите логин</label>
{% render_field form.username class="form-input" placeholder="Введите имя"%}
</div>
Автор решения: casimiro
→ Ссылка
Если хочешь вывести внизу все ошибки. Используй мой код.
{% for error in form %}
{{ error.errors }}
{% endfor %}