如何启用 Django 5 管理区域来更改用户密码?它当前显示哈希密码值,纯文本输入不允许登录

问题描述 投票:0回答:1

我继承了基本的 AbtractUser 模型并创建了一个自定义用户模型。我还没有触及密码字段。在管理区域中,它显示了哈希密码。我尝试在此字段中输入密码并保存表单,但用户无法登录并且密码不会被散列。我该如何在 django 5 中处理这个问题,以便管理员可以更改用户密码?以下是我当前的自定义用户模型 ->

class MyCustomUser(AbstractUser):
    ROLE_CHOICES = (
        ('APPLICANT', 'Applicant'),
        ('EMPLOYEE', 'Employee'),
        ('ADMIN', 'Admin'),
        (None, 'None')
    )
    role = models.CharField(max_length=30, choices=ROLE_CHOICES, default=None, blank=True, null=True)
    profile_photo = models.ImageField(upload_to='static/', blank=True, null=True)  # Specify upload directory and make it optional if you want
    REQUIRED_FIELDS = []
django-models
1个回答
0
投票

您可以使用 Django 中包含的“UserAdmin”模型来实现这一点。继承自定义用户管理类中的 UserAdmin。我的自定义用户模型中的字段消失了。创建自定义表单后,我必须将这些字段包含在字段集中。解决方案如下:

admin.py

from django.contrib.auth.admin import UserAdmin
from .models import MyCustomUser
from .forms import MyCustomUserForm
class MyCustomUserAdmin(UserAdmin):
    model = MyCustomUser
    add_form = MyCustomUserForm
    fieldsets = (
        *UserAdmin.fieldsets,
        (
            'Role',
            {
                'fields': (
                    'role',
                )
            }   
        )
    )
    list_filter = ('role',)
admin.site.register(MyCustomUser, MyCustomUserAdmin)

forms.py

from django_registration.forms import RegistrationForm
from authentication.models import MyCustomUser
class MyCustomUserForm(RegistrationForm): 
    class Meta(RegistrationForm.Meta):
        model = MyCustomUser
        fields = ['username', 'email', 'first_name', 'last_name', 'profile_photo', 'role']

模型.py

from django.contrib.auth.models import AbstractUser
from django.db import models
from django.conf import settings

class MyCustomUser(AbstractUser):
    ROLE_CHOICES = (
        ('APPLICANT', 'Applicant'),
        ('EMPLOYEE', 'Employee'),
        ('ADMIN', 'Admin'),
        (None, 'None')
    )
    role = models.CharField(max_length=30, choices=ROLE_CHOICES, default=None, blank=True, null=True)
    profile_photo = models.ImageField(upload_to='static/', blank=True, null=True) 
    REQUIRED_FIELDS = []

我从这两篇文章中学到了这一点:

Django:管理界面:如何更改用户密码

自定义用户模型字段(AbstractUser)未显示在 django admin

© www.soinside.com 2019 - 2024. All rights reserved.