首页 > 解决方案 > 从管理员创建新用户时不调用 CustomUserManager

问题描述

我的问题是我创建了一个 CustomUserManager,并覆盖了 create_user 和 create_superuser 函数。问题是当我从管理页面创建新用户时,不会调用任何这些函数。

如果我从控制台创建超级用户,则使用命令 python manage.py createsuperuser调用来自我的 CustomUserManager 的函数 create_superuser。

我创建了一个继承自 AbstractUser 的 CustomUser。另外,我创建了一个继承自 BaseUserManager 的 CustomUserManager。

这是 CustomUserManager 类

# managers.py
class CustomUserManager(BaseUserManager):
    """
    Custom user model manager where email is the unique identifiers
    for authentication instead of usernames.
    """
    def create_user(self, email, password, **extra_fields):
        # Stuff

    def create_superuser(self, email, password, **extra_fields):
        # Stuff

这是 CustomUser,将对象设置为 CustomUserManager

# models.py
class CustomUser(AbstractUser):
    username = None
    email = models.EmailField(_('email address'), unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name']

    objects = CustomUserManager()

    def __str__(self):
        return self.email

此外,我的 CustomUser 有两个表单,用于编辑或创建新用户。

class CustomUserCreationForm(UserCreationForm):

    class Meta(UserCreationForm):
        model = CustomUser
        fields = ('email',)


class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = CustomUser
        fields = ('email',)

最后,我创建了一个 CustomUserAdmin 类,在其中设置了 add_form、表单和要使用的模型。

# admin.py
class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    change_password_form = AdminPasswordChangeForm
    # stuff

标签: djangodjango-models

解决方案


推荐阅读