Как скрыть пароль в панели администратора при создании нового пользователя?

Я столкнулся с проблемой в панели администратора моего приложения. При создании нового пользователя и задании пароля пароль отображается в виде обычного текста.

Вот краткое описание проблемы:

  1. Перейдите в панель администратора.
  2. Выберите опцию создания нового пользователя.
  3. Введите пароль для нового пользователя.

Ожидаемое поведение: Пароль должен быть скрыт и отображаться в виде точек или звездочек (например, ********).

Фактическое поведение: Пароль отображается открытым текстом, что создает угрозу безопасности.

enter image description here

Может ли кто-нибудь подсказать мне, как изменить панель администратора так, чтобы пароль не отображался открытым текстом?

Это тоже не помогло Ссылка

admin.py

from django.contrib import admin
from django.contrib.auth.hashers import make_password

from user import models


class UserAdmin(admin.ModelAdmin):
    """Define the admin pages for users."""
    ordering = ['id']
    list_display = ['id', 'email', 'name']
    search_fields = ['id', 'name', 'email']
    readonly_fields = ['last_login']

    def save_model(self, request, obj, form, change):
        obj.password = make_password(obj.password)
        obj.user = request.user
        obj.save()


# Register your models here.
admin.site.register(models.User, UserAdmin)
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.hashers import make_password

from user import models

class CustomUserAdmin(BaseUserAdmin):
    """Customize the admin pages for users."""

    ordering = ['id']
    list_display = ['id', 'email', 'name']
    search_fields = ['id', 'name', 'email']
    readonly_fields = ['last_login']

    def save_model(self, request, obj, form, change):
        if obj.password:
            obj.password = make_password(obj.password)
        obj.user = request.user  # Assuming you have a 'user' field on your model
        obj.save()

# Register your models here.
admin.site.register(models.User, CustomUserAdmin)

then

<input type="password" name="password" id="id_password">

Используйте виджет PasswordInput для поля формы пароля.

Например, вот фрагмент формы создания пользователя django.contrib.auth:

class BaseUserCreationForm(forms.ModelForm):
    """
    A form that creates a user, with no privileges, from the given username and
    password.
    """

    error_messages = {
        "password_mismatch": _("The two password fields didn’t match."),
    }
    password1 = forms.CharField(
        label=_("Password"),
        strip=False,
        widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}),
        help_text=password_validation.password_validators_help_text_html(),
    )
    password2 = forms.CharField(
        label=_("Password confirmation"),
        widget=forms.PasswordInput(attrs={"autocomplete": "new-password"}),
        strip=False,
        help_text=_("Enter the same password as before, for verification."),
    )

Я не пробовал, но, возможно, вы можете использовать django.contrib.auth непосредственно в своем приложении (не забудьте прочитать документацию по jango). Возможно, что-то вроде этого:

# forms.py
from django.contrib.auth.forms import UserCreationForm

from user import models


class MyUserCreationForm(UserCreationForm):
    class Meta:
        model = models.User
# admmin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

from user import models
from .forms import MyUserCreationForm


@admin.register(models.User)
class MyUserAdmin(UserAdmin):
    """Define the admin pages for users."""
    ordering = ['id']
    list_display = ['id', 'email', 'name']
    search_fields = ['id', 'name', 'email']
    readonly_fields = ['last_login']
    add_form = MyUserCreationForm

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