我继承了基本的 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 中包含的“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 = []
我从这两篇文章中学到了这一点: