Django自定义用户表+自定义admin后台中的字段实例

下面详细讲解一下Django自定义用户表+自定义admin后台中的字段实例的完整攻略。

首先,在Django中自定义用户表时,需要继承Django默认的AbstractBaseUser和PermissionsMixin类,具体做法如下:

from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.db import models
from django.utils import timezone


class MyUserManager(BaseUserManager):
    def create_user(self, username, email, password=None,):
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            username=username,
            email=self.normalize_email(email),
            is_active=True,
            is_staff=False,
            is_superuser=False,
            last_login=timezone.now(),
            date_joined=timezone.now(),
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, username, email, password):
        user = self.create_user(
            username=username,
            email=self.normalize_email(email),
            password=password,
        )
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)
        return user


class MyUser(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=30, unique=True)
    email = models.EmailField(unique=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    date_joined = models.DateTimeField(default=timezone.now)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    objects = MyUserManager()

    def get_full_name(self):
        return self.username

    def get_short_name(self):
        return self.username

    def __str__(self):
        return self.email

上面的代码中,我们通过使用MyUserManager类来定义create_user和create_superuser方法,从而实现了自定义用户表。

接下来,我们来讲解自定义admin后台中的字段实例。在Django中自定义admin后台中的字段时,可以通过修改ModelAdmin类中的list_display属性来实现。具体做法如下:

from django.contrib import admin

from .models import MyUser


class MyUserAdmin(admin.ModelAdmin):
    list_display = ('id', 'username', 'email', 'is_active', 'is_staff', 'date_joined')


admin.site.register(MyUser, MyUserAdmin)

上面的代码中,我们在list_display属性中添加了我们自定义的字段,其中'id'字段、'username'字段、'email'字段、'is_active'字段、'is_staff'字段和'date_joined'字段分别对应用户的唯一标识符、用户名、邮箱、是否激活、是否是管理员和加入日期。这些字段可以根据自己的需求进行改动,从而实现自定义admin后台中的字段。

示例1:

假设我们的业务需要对用户的地址进行记录,因此需要在自定义用户表中添加一个地址字段。我们可以通过在MyUser类中添加address字段来实现:

class MyUser(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=30, unique=True)
    email = models.EmailField(unique=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    date_joined = models.DateTimeField(default=timezone.now)
    address = models.CharField(max_length=255, blank=True, null=True)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    objects = MyUserManager()

    def get_full_name(self):
        return self.username

    def get_short_name(self):
        return self.username

    def __str__(self):
        return self.email

然后,我们需要在自定义admin后台中显示这个地址字段。我们可以在MyUserAdmin类中的list_display属性中添加'address'字段:

class MyUserAdmin(admin.ModelAdmin):
    list_display = ('id', 'username', 'email', 'is_active', 'is_staff', 'date_joined', 'address')

这样,在自定义admin后台中就能显示用户的地址了。

示例2:

假设我们的业务需要记录用户最后一次登录的时间。我们可以通过在MyUser类中添加last_login_time字段来实现:

class MyUser(AbstractBaseUser, PermissionsMixin):
    username = models.CharField(max_length=30, unique=True)
    email = models.EmailField(unique=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    date_joined = models.DateTimeField(default=timezone.now)
    address = models.CharField(max_length=255, blank=True, null=True)
    last_login_time = models.DateTimeField(default=timezone.now)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    objects = MyUserManager()

    def get_full_name(self):
        return self.username

    def get_short_name(self):
        return self.username

    def __str__(self):
        return self.email

然后,我们需要在自定义admin后台中显示这个last_login_time字段。我们可以在MyUserAdmin类中的list_display属性中添加'last_login_time'字段:

class MyUserAdmin(admin.ModelAdmin):
    list_display = ('id', 'username', 'email', 'is_active', 'is_staff', 'date_joined', 'address', 'last_login_time')

这样,在自定义admin后台中就能显示用户最后一次登录的时间了。

总结:

通过以上两个示例,我们可以看到,通过在自定义用户表中添加字段和在自定义admin后台中添加字段,可以实现非常灵活的自定义需求。同时,以上的代码也展示了如何通过修改list_display属性来自定义admin后台中的字段,这对于开发和维护Django应用程序是非常有帮助的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django自定义用户表+自定义admin后台中的字段实例 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • MongoDB分片键的选择和案例实例详解

    关于”MongoDB分片键的选择和案例实例详解”的攻略,我可以提供以下内容: 1. 什么是MongoDB分片键? MongoDB分片是一种横向扩展的方式,一般通过分片键来进行数据划分和分布式存储。分片键是用于划分数据和分发到不同的Shard节点上的字段或字段组合。MongoDB中允许指定多个分片键来构建复合分片键。 2. MongoDB分片键的选择 在选择M…

    人工智能概论 2023年5月25日
    00
  • Nginx配置指令location匹配符优先级和安全问题

    Nginx是一款高性能的Web服务器,具有可靠和稳定的特性。其中,location匹配符是Nginx中重要的配置指令之一,它作为URL请求路径的匹配条件,可以定义不同URL请求路径的处理方式。在使用location匹配符时,有时会遇到优先级和安全问题。下面我们将详细讲解如何解决这些问题。 优先级问题 当多个location匹配符同时匹配到某个请求路径时,Ng…

    人工智能概览 2023年5月25日
    00
  • 用Python一键搭建Http服务器的方法

    下面是详细讲解“用Python一键搭建Http服务器的方法”的完整攻略。 目录 背景介绍 使用SimpleHTTPServer模块搭建服务器 使用http.server模块搭建服务器 示例说明 总结 背景介绍 在开发过程中,我们可能需要将一些静态的文件部署到一个Http服务器上,比如图片、CSS、JS等文件。有些时候我们可能并不想通过IIS、Apache等W…

    人工智能概论 2023年5月25日
    00
  • Pytorch 实现focal_loss 多类别和二分类示例

    让我来为你详细讲解一下“Pytorch 实现focal_loss 多类别和二分类示例”的完整攻略。 1. 什么是focal loss? Focal Loss是一种改进的交叉熵损失函数,适用于类别不平衡的情况。在深度学习中,由于样本分布不均,即某些类别的样本数很少,另一些类别的样本数很多,这种不平衡的情况会导致模型训练不稳定,容易使模型在少数类别上产生过拟合,…

    人工智能概论 2023年5月25日
    00
  • OpenCV绘制圆端矩形的示例代码

    以下是针对OpenCV绘制圆端矩形的示例代码的详细攻略。 示例一:绘制圆端矩形 下面是一份基本的OpenCV代码,用于绘制圆端矩形: import cv2 img = cv2.imread("demo.jpg") img = cv2.rectangle(img, (50, 50), (200, 200), (0, 255, 0), thi…

    人工智能概论 2023年5月25日
    00
  • iis7 iis8反向代理规则编写、安装与配置方法

    下面我们来详细讲解 iis7 iis8 反向代理规则编写、安装与配置方法的攻略。 什么是反向代理? 在介绍反向代理的配置方法之前,我们先要了解什么是反向代理。反向代理是一种网络服务器的部署方式,它的作用就是接收来自客户端的请求,并将请求转发到内部的服务器上,最后将服务器响应的内容返回给客户端。这个过程中客户端并不知道请求到底是由哪个服务器处理的,因为反向代理…

    人工智能概览 2023年5月25日
    00
  • python制作的天气预报小工具(gui界面)

    下面是制作“python制作的天气预报小工具(gui界面)” 的完整攻略,包含以下几个步骤。 步骤1:准备工作 在开始制作之前,需要先准备好以下工具和环境: Python编程语言 Tkinter模块(Python自带) requests和bs4等模块 一款可用的天气网站(例如中国天气网) 步骤2:获取天气数据 在制作小工具之前,需要先获取天气数据。这可以通过…

    人工智能概论 2023年5月24日
    00
  • pyqt5 QScrollArea设置在自定义侧(任何位置)

    要在自定义部件中使用 QScrollArea,可以先创建一个 QWidget,然后在这个 QWidget 上添加一个 QScrollArea,最后把你想滑动的部件添加到 QScrollArea 中。下面是设置在自定义侧的步骤。 步骤 导入 pyqt5 库,并创建一个带有滚动条的 QWidget from PyQt5.QtWidgets import QWid…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部