Если пароли не совпадают то все данные с формы пропадают
class AddUserView(View):
def get(self, request):
form = UserForm()
context = {
'form': form
}
cashbox_choices = CashBox.objects.all()
context = {
'form': form,
'cashbox_choices': cashbox_choices,}
return render(request, 'system/forms/create_user.html', context)
def post(self, request):
form = UserForm(request.POST)
if form.is_valid():
password = form.cleaned_data['password']
confirm_password = form.data['confirm_password'] # Correct way to access confirm_password
if password != confirm_password:
form.add_error('confirm_password', 'Пароли не совпадают')
context = {'form': form}
return render(request, 'system/forms/create_user.html', context)
user = form.save(commit=False)
user.set_password(password)
user.save()
return redirect('system:users')
return render(request, 'system/users.html', {'form': form})
class UserForm(forms.ModelForm):
password = forms.CharField(widget=PasswordInput())
confirm_password = forms.CharField(widget=PasswordInput())
role = forms.ChoiceField(choices=UserRoleChoices.choices)
class Meta:
model = User
fields = ['first_name', 'last_name', 'role', 'email', 'phone', 'cashbox']
labels = {
'role': 'Роль пользователя'
}
def __init__(self, *args, **kwargs):
super(UserForm, self).__init__(*args, **kwargs)
for visible in self.visible_fields():
visible.field.widget.attrs['class'] = 'form-control'
{% extends 'base.html' %}
{% load static %}
{% block title %}Добавить пользователя{% endblock %}
{% block head %}Добавить пользователя{% endblock %}
{% block bread %}Добавить пользователя{% endblock %}
{% block content %}
<div class="card card-primary card-outline">
<div class="card-header">
<h5 class="m-0">Добавить пользователя</h5>
</div>
<div class="card-body">
<form method="post">
{% csrf_token %}
<div class="form-group">
<label for="first_name">Имя:</label>
<input type="text" class="form-control" id="first_name" name="first_name" required>
</div>
<div class="form-group">
<label for="last_name">Фамилия:</label>
<input type="text" class="form-control" id="last_name" name="last_name" required>
</div>
<div class="form-group">
<label for="phone">Телефон:</label>
<input type="text" class="form-control" id="phone" name="phone" required>
</div>
<div class="form-group">
<label for="email">Email:</label>
<input type="email" class="form-control" id="email" name="email" required>
</div>
<div class="form-group">
<label for="cashbox">Касса:</label>
<select class="form-control" id="cashbox" name="kassa" required>
<option value="">выберите кассу</option>
{% for cashbox in cashbox_choices %}
<option value="{{ cashbox.id }}">{{ cashbox.title }}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label for="role">Роль пользователя:</label>
<select class="form-control custom-select" id="role" name="role" required>
<option value="">Выберите роль</option>
{% for choice in form.role.field.choices %}
<option value="{{ choice.0 }}">{{ choice.1 }}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label for="password">Пароль:</label>
<input type="password" class="form-control" id="password" name="password" required>
</div>
<div class="form-group">
<label for="confirm_password">Подтверждение пароля:</label>
<input type="password" class="form-control" id="confirm_password" name="confirm_password" required>
{% for error in form.confirm_password.errors %}
<p class="text-danger">{{ error }}</p>
{% endfor %}
</div>
<button type="submit" class="btn btn-primary">Добавить</button>
</form>
</div>
</div>
{% endblock %}
Источник: Stack Overflow на русском