Как сбросить пароль в форме изменения пользователя 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.

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