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日

相关文章

  • python连接mongodb密码认证实例

    下面是完整的“Python连接MongoDB密码认证实例”攻略: 一、前提准备 安装MongoDB数据库 安装Python编程语言 安装pymongo库(需要用到pip命令) 二、创建MongoDB用户 在进行MongoDB的密码认证之前,需要先创建一个MongoDB用户,用户的信息包括用户名和密码。具体步骤如下: 打开MongoDB客户端,并连接到数据库。…

    人工智能概览 2023年5月25日
    00
  • Docker安装Nginx教程实现图例讲解

    Docker安装Nginx教程 简介 Docker 是一个轻量级容器引擎,通过 Docker 可以快速的部署和管理应用程序。同时,Nginx 是一款高性能的开源 Web 服务器,也可以作为反向代理服务器、负载均衡器等使用。本教程旨在讲解如何使用 Docker 安装 Nginx,以便更好地管理 Web 应用并提升性能。 准备工作 在开始安装之前,需要确保系统中…

    人工智能概览 2023年5月25日
    00
  • tensorflow pb to tflite 精度下降详解

    首先我们需要明确一点,将TensorFlow pb模型转换为TensorFlow Lite格式可能会导致精度下降,主要原因是两种格式的计算方式不同。而这种精度下降的原因有很多,下面我们逐一分析。 原因一:量化 TensorFlow Lite是一种被量化的格式,也就是说,它将在一定程度上损失精度以换取性能的提升。这种损失的程度取决于模型本身的精度以及量化的方式…

    人工智能概论 2023年5月25日
    00
  • checkpoint 机制具体实现示例详解

    Checkpoint机制具体实现示例详解 什么是Checkpoint机制 Checkpoint机制是一种保证分布式系统故障恢复的机制。在执行期间,系统会定期记录程序的状态,并以此生成检查点(Checkpoint)。当程序出错时,可以恢复至最近一次的Checkpoint状态。 Checkpoint机制的实现 Checkpoint机制的实现流程 Checkpoi…

    人工智能概论 2023年5月25日
    00
  • Python3基于plotly模块保存图片表格

    下面是关于Python3基于plotly模块保存图片表格的完整攻略。 前言 Plotly是一个开源绘图库,可以提供折线图、散点图、误差条、条形图、直方图、热图、子图等多种图表类型,支持多个编程语言的调用,如Python、R、Matlab、Julia等。 本篇攻略主要介绍在Python3环境下使用Plotly绘制图表的方法,并且详细讲解如何通过Plotly的导…

    人工智能概览 2023年5月25日
    00
  • iOS判断身份证号码是否正确的方法

    iOS判断身份证号码是否正确的方法 在iOS开发中,判断身份证号码是否正确是非常常见的需求。它涉及到身份证号码的规则校验和部分解析。以下是判断身份证号码是否正确的方法: 校验规则 首先,我们需要了解身份证号码的校验规则。根据国家标准《GB 11643-1999》规定,身份证号码共计18位,其中前17位为地区码和出生日期码,第18位为校验位。其中,校验位的计算…

    人工智能概论 2023年5月25日
    00
  • 四款截图软件测评(推荐)

    四款截图软件测评(推荐) 本篇文章将对四款常用的截图软件进行测评和推荐,分别是: Snipping Tool Greenshot LightShot Snagit 1. Snipping Tool 简介 Snipping Tool 是 Windows 操作系统自带的截图工具,不需要安装任何软件,简单易用,适合一般的截图需求。 使用方法 打开 Snipping…

    人工智能概论 2023年5月25日
    00
  • Springboot基于assembly的服务化打包方案及spring boot部署方式

    Spring Boot是一种快速开发应用程序的框架,它的优点在于它有着可扩展的安装选项。使用Maven或Gradle构建应用程序时,可以将Spring Boot应用程序打包为JAR文件以便快速部署。使用Spring Boot打包服务,我们可以做到移植性以及快速安装。 Spring Boot基于assembly的服务化打包方案 使用Spring Boot通过m…

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