Django UserChangeForm некорректно отображает ссылку "this form" с помощью form.as_p

Я пытаюсь отобразить его с помощью form.as_p, и он отображается в основном так, как должен. Однако ссылка на раздел смены пароля отображается неправильно. Вместо синей ссылки на "этой форме" я получаю...

"Сырые пароли не хранятся, поэтому нет возможности увидеть пароль этого пользователя, но вы можете изменить пароль с помощью этой формы." Кто-нибудь сталкивался с этой проблемой?

вот мой HTML:

{% extends 'base.html' %}
{% block title %}Edit Profile{% endblock %}
{% block content %}

<h1>Edit Profile...</h1>
<br/>
<div class="form-group">
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button class="btn btn-secondary">Update Profile</button>
    </form>
</div>


{% endblock %}

И мой forms.py:

from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth.models import User 
from django import forms

class EditProfileForm(UserChangeForm):
    email = forms.EmailField(widget=forms.EmailInput(attrs={'class': 'form-control'}))
    first_name = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'class': 'form-control'}))
    last_name = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'class': 'form-control'}))
    username = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'class': 'form-control'}))
    last_login = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'class': 'form-control'}))
    is_superuser = forms.CharField(max_length=100, widget=forms.CheckboxInput(attrs={'class': 'form-check'}))
    is_staff = forms.CharField(max_length=100, widget=forms.CheckboxInput(attrs={'class': 'form-check'}))
    is_active = forms.CharField(max_length=100, widget=forms.CheckboxInput(attrs={'class': 'form-check'}))
    date_joined = forms.CharField(max_length=100, widget=forms.TextInput(attrs={'class': 'form-control'}))

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password', 'last_login', 'is_superuser', 'is_staff', 'is_active', 'date_joined')

Views.py:

from django.shortcuts import render
from django.views import generic
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.urls import reverse_lazy
from .forms import SignUpForm, EditProfileForm

from members.forms import SignUpForm

class UserRegisterView(generic.CreateView):
    form_class = SignUpForm
    template_name = 'registration/register.html'
    success_url = reverse_lazy('login')

class UserEditView(generic.UpdateView):
    form_class = EditProfileForm
    template_name = 'registration/edit_profile.html'
    success_url = reverse_lazy('home')

    def get_object(self):
        return self.request.user

urls.py:

from django.urls import path
from .views import UserRegisterView, UserEditView
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('register/', UserRegisterView.as_view(), name="register"),
    path('edit_profile/', UserEditView.as_view(), name="edit_profile"),
    path('password/', auth_views.PasswordChangeView.as_view())

Все отображается правильно, за исключением того, что я получаю следующее на странице для раздела пароля:

Пароли не хранятся, поэтому нет возможности увидеть пароль этого пользователя, но вы можете изменить пароль, используя < a href="../password/">эту форму< a >.

Кто-нибудь знает, как это исправить?

В последних версиях Django текст справки не safe по умолчанию и UserChangeForm не был обновлен, чтобы отразить это изменение.

Для получения желаемого результата необходимо переопределить password с mark_safe в UserChangeForm:

from django.contrib.auth.forms import ReadOnlyPasswordHashField, UserChangeForm
from django.utils.safestring import mark_safe

class UserEditView(UserChangeForm):
    password = ReadOnlyPasswordHashField(
        label=("Password"),
        help_text=mark_safe(
            'Raw passwords are not stored, so there is no way to see this '
            'user’s password, but you can change the password using '
            '<a href="{}">this form</a>.'
        ),
    )
    
    ...
Вернуться на верх