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

yizhihongxing

下面详细讲解一下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日

相关文章

  • 聊聊pytorch中Optimizer与optimizer.step()的用法

    当我们在使用PyTorch进行神经网络模型训练时,一般需要定义一个优化器,通过这个优化器去更新神经网络模型中的参数。那么,本篇攻略就来详细讲解一下PyTorch中Optimizer与optimizer.step()的用法。 什么是Optimizer 在进行模型训练时,我们在每一轮迭代中,都需要更新模型中的参数,使其更好地拟合数据。这个过程的实现就需要使用到优…

    人工智能概论 2023年5月25日
    00
  • node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】

    下面我来详细讲解“node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】”的完整攻略。 环境准备 在阿里云服务器上,我们首先需要安装好 Node 和 MongoDB。在 Ubuntu 下,安装命令如下: 安装 Node.js $ curl -sL https://deb.nodesource.com/setup_12.x | sudo -…

    人工智能概论 2023年5月25日
    00
  • 对python中的six.moves模块的下载函数urlretrieve详解

    对python中的six.moves模块的下载函数urlretrieve详解 介绍 six.moves是由six模块提供的一个适用于Python 2和3的兼容性工具,致力于让开发者在Python 2/3之间轻松移植。常用的六个子模块:- builtins- configparser- http_client- urllib- queue- xrange si…

    人工智能概览 2023年5月25日
    00
  • 基于Django URL传参 FORM表单传数据 get post的用法实例

    那我就给您一份详细的攻略介绍一下如何基于Django实现URL传参、FORM表单传数据、GET和POST请求的用法实例。 使用URL传参 在Django Web应用程序中,URL传参是一种非常常见的方式,它允许我们通过URL将参数传递给视图函数,从而根据参数的不同展示不同的页面内容。 首先,我们需要在urls.py中设置好参数传递的规则。例如: from d…

    人工智能概览 2023年5月25日
    00
  • 公司一般使用的分布式RPC框架及其原理面试

    一、介绍RPC框架 RPC框架全称为Remote Procedure Call(远程过程调用),是指为了完成分布式系统之间的远程调用而设计的一种通信框架。在分布式系统中,不同进程或不同服务器之间需要相互通信,但进程/服务器之间的通信常常涉及到跨越网络较长的距离,此时HTTP等协议的开销较大,并且编写代码繁琐,因此RPC框架应运而生。 RPC框架的作用是:将远…

    人工智能概览 2023年5月25日
    00
  • Linux系统如何安装mongodb数据库Mongo扩展

    安装MongoDB数据库的步骤如下: 1.下载MongoDB 需要前往MongoDB官网下载对应版本的MongoDB。 2.安装MongoDB 在Linux系统上安装MongoDB,可以通过以下方式: 2.1 添加MongoDB APT仓库 $ wget -qO – https://www.mongodb.org/static/pgp/server-4.4.…

    人工智能概览 2023年5月25日
    00
  • 在Django同1个页面中的多表单处理详解

    在Django中,同一个页面需要处理多个表单是一种常见需求。为了实现这一点,可以使用Django的FormView视图类。下面是使用FormView视图类处理多个表单的详细过程。 步骤一:创建表单 首先,我们需要创建表单。在这里,我们将创建两个表单:LoginForm和RegistrationForm。 from django import forms cl…

    人工智能概论 2023年5月25日
    00
  • Python环境的安装以及PyCharm编辑器配置教程详解

    下面详细讲解“Python环境的安装以及PyCharm编辑器配置教程详解”。 Python环境的安装 系统要求 Python环境的安装需要满足以下系统要求: 硬件:2 GHz或更快的处理器,2 GB或更多内存,1 GB或更多磁盘空间(具体硬件要求视Python版本和应用程序的使用要求而定) 操作系统:Windows、macOS、Linux等 Python版本…

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