Как отправить форму в Django ModelForm без изменения значения пароля?

Я новичок в Django и хочу попросить совета:

В форме должна меняться информация о пользователе, но если я не заполняю поля "password" и "confirm_password", то в базу данных отправляется пустая строка. Я пытался внести изменения в валидатор пароля, но не понял, как отправить данные в базу данных, без значения полей "password" и "confirm_password".

Насколько я понимаю, самое правильное - это изменить метод сохранения, но я не совсем понимаю, как это правильно сделать.

view.py

def change_user_data(request):
    message = ''
    if request.method == "POST":       
        form = ChangeUserForm(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            message = 'Изменения успешно применены!'
    else:
        form = ChangeUserForm(instance=request.user)

    return render(request, 'users/change_user_data.html', context={'form': form, 'message': message})

form.py

Шаблон:

<form method="post">
    {% csrf_token %}

    {{ message }}

    {% comment %} {{ form.as_p }} {% endcomment %}


    <p>{{ form.name.label_tag }}</p>
    <p>{{ form.name }}</p>
    <p>{{ form.surname.label_tag }}</p>
    <p>{{ form.surname }}</p>
    <p>{{ form.nickname.label_tag }}</p>
    <p>{{ form.nickname }}</p>
    <p>{{ form.email.label_tag }}</p>
    <p>{{ form.email }}</p>
    <p>{{ form.email.errors }}</p>
    <p>{{ form.address.label_tag }}</p>
    <p>{{ form.address }}</p>
    <p>{{ form.card_id.label_tag }}</p>
    <p>{{ form.card_id }}</p>
    <p>{{ form.language.label_tag }}</p>
    <p>{{ form.language }}</p>
    <p>{{ form.sex.label_tag }}</p>
    <p>{{ form.sex }}</p>
    <p>{{ form.phone_number.label_tag }}</p>
    <p>{{ form.phone_number }}</p>
    <p>{{ form.phone_number.errors }}</p>
    <p>{{ form.town.label_tag }}</p>
    <p>{{ form.town }}</p>

    <p>{{ form.born.label_tag }}</p>
    <p>{{ form.born }}</p>
    <p>{{ form.born.errors }}</p>

    <p>{{ form.password.label_tag }}</p>
    <p>{{ form.password }}</p>
    <p>{{ form.password.errors }}</p>


    <p>{{ form.confirm_password.label_tag }}</p>
    <p>{{ form.confirm_password }}</p>


    <button type="submit" class="btn btn-secondary">Submit</button>

</form>

Я читал другие темы, но, к сожалению, не нашел ответа на свой вопрос. Буду очень признателен за помощь =)

Ваш метод запроса должен быть PUT или PATCH, а не POST. Post создает новые данные, то есть если вы не заполните поле, оно будет пустым. PATCH и PUT - это методы запроса для обновления данных. В частности, PATCH изменяет только те поля, которые вы ввели, оставляя другие поля нетронутыми. Удачи.

Вернуться на верх