How to reset password in a Django UserChangeForm
I have a basic CustomUser model in my project. When I want to update it I fill my form with instance where I try to make user's passsword null, but anyway in the form i recieve: "No password set.
Set password
Raw passwords are not stored, so there is no way to see the user’s password." And Set password is a link that leads me to nowhere. I just want a password field to be null in my update form.
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 %}