【发布时间】:2021-04-03 10:08:54
【问题描述】:
我正在尝试将以下代码添加到 admin.py 以确保从 django admin 创建的用户密码将被散列。
from django.contrib import admin
from .models import *
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin
class UserAdmin(DjangoUserAdmin):
pass
# Register your models here.
admin.site.register(User, UserAdmin)
但是当我尝试时,我得到了以下结果:
: (admin.E108) 的值 'list_display[2]' 指的是 'first_name',它不是可调用的, 'UserAdmin' 的属性,或属性或方法 'authentication.User'。
用户模型如下所示
class User(AbstractBaseUser, PermissionsMixin):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
username = models.CharField(max_length=255, unique=True, db_index=True)
email = models.EmailField(max_length=255, unique=True, db_index=True)
is_verified = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
balance = models.FloatField(default=0.0)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
objects = UserManager()
def __str__(self):
return self.email
def tokens(self):
"""" Метод получения токена """
refresh = RefreshToken.for_user(self)
return {
'refresh': str(refresh),
'access': str(refresh.access_token)
}
def has_delete_permission(self, *args, **kwargs):
return True if self.is_staff is True else False
【问题讨论】:
-
您的
User模型没有first_name或last_name... -
您可能还需要将
form和add_form属性更改为您自己的表单(它们直接使用默认用户模型)。 -
@WillemVanOnsem 如果我不想在我的模型中有这个字段怎么办?
-
@AlexNikitin:您需要更改提及这些字段的所有属性,例如
list_display = ('username', 'email', 'is_staff')。 -
@AlexNikitin:但问题更严重,因为正如 Abdul 所说,您还需要更新表单,以便这些表单也不再使用这些字段。