Как отправить форму в 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 изменяет только те поля, которые вы ввели, оставляя другие поля нетронутыми. Удачи.