Как сбросить пароль в форме изменения пользователя Django
В моем проекте есть базовая модель пользовательского интерфейса. Когда я хочу обновить ее, я заполняю свою форму с помощью instance, где пытаюсь сделать пароль пользователя нулевым, но в любом случае в форме, которую я получаю: "Пароль не установлен.
Установить пароль
Исходные пароли не сохраняются, поэтому нет возможности просмотреть пароль пользователя." И установить пароль - это ссылка, которая ведет меня в никуда. Я просто хочу, чтобы поле пароля в моей форме обновления было пустым.
views.py
...
class CustomUserUpdateView(View):
def get(self, request, *args, **kwargs):
user_id = kwargs["user_id"]
if request.user.is_authenticated:
user = get_object_or_404(CustomUser, id=user_id)
user.password = None
if request.user == user:
form = CustomUserChangeForm(instance=user)
return render(
request, "users/update.html", {"form": form, "user_id": user_id}
)
else:
return HttpResponse("you damn wrong")
else:
return HttpResponse("you idiot")
def post(self, request, *args, **kwargs):
user_id = kwargs["user_id"]
user = get_object_or_404(CustomUser, id=user_id)
form = CustomUserChangeForm(request.POST, instance=user)
if form.is_valid():
form.save()
return redirect("users_list")
return render(
request, "users/update.html", {"form": form, "user_id": user_id}
)
...
models.py
from django.contrib.auth.models import AbstractUser
# Create your models here.
class CustomUser(AbstractUser):
pass
def __str__(self):
return self.username
forms.py
...
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = ('first_name', 'last_name', 'username', 'password')
update.html
{% extends "base.html" %}
{% block content %}
{% if form.errors %}
<div>
<ul>
{% for error in form.errors %}
<li><strong>{{ error|escape }}</strong></li>
{% endfor %}
</ul>
</div>
{% endif %}
<form action="{% url 'users_update' user_id=user_id %}" method="post">
{% csrf_token %}
<table border="1">
{{ form.as_p }}
</table>
<input type="submit" value="Сохранить">
</form>
{% endblock %}
The behavior you’re seeing is because Django’s built-in UserChangeForm (and your CustomUserChangeForm that inherits from it) never exposes the raw password in the form. The password field in UserChangeForm is a read-only display field that always shows the message:
No password set. Set password. Raw passwords are not stored, so there is no way to see the user’s password.