Если пароли не совпадают то все данные с формы пропадают

Рейтинг: 0Ответов: 0Опубликовано: 02.08.2023
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 %}

Ответы

Ответов пока нет.