Django自定义用户模型与Admin后台字段配置详解

晚来风
晚来风
发布时间:2026-10-13 | 2人浏览过
原创

本文详细介绍如何在Django中通过继承AbstractUser创建自定义用户模型,并在settings中配置AUTH_USER_MODEL。涵盖Model定义、数据库迁移、Admin后台注册及字段显示优化,包括使用__str__方法和list_display扩展后台展示内容,帮助开发者灵活管理用户数据。

Django自定义用户模型配置与实现

在Django项目中引入自定义用户表时,需特别注意相关配置事项。

务必在项目的settings配置文件中明确指定AUTH_USER_MODEL字段,以确保框架正确加载自定义用户模型。


  # 覆盖默认的用户模型,使用自定义用户模型
  # 语 法:'app的名称.自定义用户模型的名称'
  AUTH_USER_MODEL = 'admi.UserModel'

接下来,在对应的models.py文件中编写UserModel类,实现用户数据的扩展定义。


from django.db import models
from django.contrib.auth.models import AbstractUser
# Django框架将createsuperuser创建的用户以及在amdin后台添加的用户,默认都保存在了auth_user这个表中,但是这个表的字段是固定的,如果想给用户扩展一些字段(年龄、性别、住址等),就需要重写User表了,不能再使用auth_user这个表了。

class UserModel(AbstractUser):
    # AbstractUser这个类,也就是Django框架默认使用的一个用于管理用户的User类,这个类生成一个auth_user表。所以,要扩展用户属性,可以继承AbstractUser,在子类UserModel中实现扩展。  
    nick_name=models.CharField(max_length=25,verbose_name='昵称')
    user_address=models.CharField(max_length=35,verbose_name='住址')

    class Meta:
     # 配置自定义用户表名是user_table
      db_table='user_table'
      verbose_name='用户'
      verbose_name_plural=verbose_name

完成模型定义后,需在当前应用目录下的admin.py文件中将该模型进行注册,以便在后台管理系统中可见。


# 只要使用admin后台系统,所有的Model必须在这里进行注册
admin.site.register(UserModel)

完成上述代码编写后,进入测试阶段。

执行makemigrations和migrate命令,将模型变更同步至数据库。

随后打开数据库管理工具,可以观察到user_table表已成功生成,且表中包含了我们定义的两个扩展字段。

这两个字段分别为nick_name(昵称)和user_address(用户地址)。

接下来,进入Admin后台界面进行功能测试。

首先使用createsuperuser命令创建一个超级用户账号。

通过Admin登录后台管理系统。

后台默认生成一个代表用户名的字段,若希望优化显示,可将UserModel中Meta类下的verbose_name修改为“用户名”,刷新Admin页面后,后台显示的字段标签会随之更新。

这种修改无需重新更新数据库结构,操作十分便捷。

Admin后台字段显示优化

此外,还可以对后台字段进行进一步扩展优化。

首先调整用户名在后台的显示内容,避免仅显示默认的“admin”显得单调。

在UserModel类中实现__str__魔法方法,以自定义字符串表示形式。

具体实现效果如下所示。

其次,让后台信息列表展示更多字段,提升管理效率。


  # 修改app下的admin.py文件
  from django.contrib import admin
  from .models import *
  class UserAdmin(admin.ModelAdmin):
    # 设置显示数据库中哪些字段
    list_display = ['username','password','nick_name','user_address']
    
  admin.site.register(UserModel,UserAdmin)

对应的界面效果如截图所示。

以上关于Django自定义用户表及Admin后台字段配置的实例分享完毕,希望能为读者提供有价值的参考,欢迎继续支持本站获取更多技术内容。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表