如何将自定义的Django用户模型注册到管理页面?

5

我跟随教程学习了如何通过邮箱而非普通用户名允许Django进行身份验证,但是他们没有提到如何在管理员页面注册新的自定义用户模型!我是Django的真正初学者,因此我希望能提供尽可能详细的信息!以下是我的代码:

managers.py

from django.contrib.auth.models import BaseUserManager

class CustomUserManager(BaseUserManager):

    def create_user(self, email, password=None, **kwargs):
        if not email:
            raise ValueError('Email field is required')

        email = self.normalize_email(email)
        user = self.model(email=email, **kwargs)
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, email, password, **extra_fields):
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)
        return self.create_user(email, password, **extra_fields)

models.py

from django.db import models
from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import PermissionsMixin
from django.utils.translation import gettext_lazy as _

from .managers import CustomUserManager

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True, null=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_('Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. ''Unselect this instead of deleting accounts.'
        ),
    )

    USERNAME_FIELD = 'email'
    objects = CustomUserManager()

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def get_full_name(self):
        return self.email

    def get_short_name(self):
        return self.get_full_name()

    def __str__(self):
        return self.email

admin.py

from django.contrib import admin

# Register your models here.

你需要先导入你的模型,然后使用 "admin.site.register(Yourcustommodel)" 进行注册。 - agent_bean
2个回答

6

请在您的admin.py中尝试此代码。

我们可以使用register修饰符来注册我们的模型。

from django.contrib import admin
from .models import CustomUser

@admin.register(CustomUser)
class CustomUserAdmin(admin.ModelAdmin):
    pass

0
from .models import CustomUser
class CustomUserAdmin(admin.ModelAdmin):
    list_display = ('email',...) # add fields as you want

admin.site.register(CustomUser, CustomUserAdmin)

1
在这个网站上,仅提供代码的答案通常不被看好。您能否编辑您的答案并包含一些注释或解释您的代码?解释应该回答以下问题:它是做什么的?它是如何做到的?它去哪里?它是如何解决 OP 的问题的?请参阅:如何回答问题。谢谢! - Eduardo Baitello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接