【Django】继承框架中用户模型基类AbstractUser扩展系统用户表字段

Django项目新建好app之后,通常情况下需要首要考虑的就是可以认为最重要的用户表,即users对应的model,它对于系统来说可以说是最基础的依赖。
实际上,我们在初始进行migration的时候已经同步生成了相应的user表,如下:
在这里插入图片描述
对应的表结构如下:
在这里插入图片描述
上述的这些字段通常都是可以保留使用的,但是为了方便扩展实际中是可以进行字段添加的,例如在users相应的app包中修改其对应的models.py文件

from django.db import models
from django.contrib.auth.models import AbstractUser# 元组用于定义性别字段的可选值。第一个元素是存储在数据库中的值,第二个元素是显示给用户的友好名称
GENDER_CHOICES = (("male", "男"),("female", "女")
)# 上述导入models模块是Django中提供的用于定义数据库模型的
# AbstractUser是Django的用户模型基类,提供了默认的用户字段和功能,比如用户名、密码、电子邮件等。这里直接继承
class UserProfile(AbstractUser):nick_name = models.CharField(max_length=50, verbose_name="昵称", default="")birthday = models.DateField(verbose_name="生日", null=True, blank=True)gender = models.CharField(verbose_name="性别", choices=GENDER_CHOICES, max_length=6)address = models.CharField(max_length=100, verbose_name="地址", default="")mobile = models.CharField(max_length=11, unique=True, verbose_name="手机号码")image = models.ImageField(verbose_name="用户头像", upload_to="head_image/%Y/%m", default="default.jpg")# Meta类用于定义与模型相关的元数据,这些元数据不会直接影响数据库的结构,但会影响模型的行为和在Django管理界面中的显示方式# verbose_name: 模型的单数名称,用于在Django管理界面显示# verbose_name_plural: 模型的复数名称,与单数名称相同class Meta:verbose_name = "用户信息"verbose_name_plural = verbose_name# __str__方法定义了模型实例的字符串表示。若有昵称,则返回昵称;否则返回用户名,这使得在Django管理界面中更容易识别用户def __str__(self):if self.nick_name:return self.nick_nameelse:return self.username

更新model还不够,还需要在项目中的配置文件settings.py中添加如下配置:

AUTH_USER_MODEL = "users.UserProfile"

为什么在settings.py中添加相应的配置为AUTH_USER_MODEL = "users.UserProfile"而不是AUTH_USER_MODEL = “apps.users.models.UserProfile”?

这是一种约定,用于指定自定义用户模型。AUTH_USER_MODEL 只需包含应用名和模型名,Django会根据应用的名称解析模型,而不是通过模块路径。只要确保在 INSTALLED_APPS中正确注册了users应用,Django就能找到对应的模型。

更新了用户模型之后就可以重新makemigrations和migrate了,数据库中将重新生成相应的用户表(可以在迁移之前先删除之前的表),如下:
在这里插入图片描述
在这里插入图片描述
可见添加的字段都更新进表中了。

说明:过程中如果出现报错,可以先将旧表及migrations中的相关文件都先删了然后再先makemigrations再migrate。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spygalss cdc 检测的bug(二)

当allow_qualifier_merge设置为strict的时候,sg是要检查门的极性的。 如果qualifier和src经过与门汇聚,在同另一个src1信号或门汇聚,sg是报unsync的。 假设当qualifier为0时,0&&src||src1src1,src1无法被gat…

xss-labs靶场第十七关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机:本机(127.0.0.1) 靶 机:本机(127.0.0.…

练习题 - Scrapy爬虫框架 Requests and Responses 请求和响应

Scrapy 是一个用于在 Python 中构建网络爬虫和抓取数据的强大工具。对于学习网络爬虫的编程初学者来说,了解 Scrapy 的请求(Requests)和响应(Responses)机制至关重要。这些机制不仅是 Scrapy 工作的核心,也是理解如何与网页进行交互的关键。 通过这篇文章,我们将通过实…

gitlab 的备份与回复

一、gitlab备份 1.确定备份目录 gitlab 默认的备份目录为/var/opt/gitlab/backups,可通过配置gitlab.rb配置文件进行修改,如: [rootlocalhost ~]# vim /etc/gitlab/gitlab.rb #若要修改备份文件的存储目录话,打开下面选项的注释…

Jenkins发布vue项目,版本不一致导致build错误

问题一 yarn.lock文件的存在导致在自动化的时候,频频失败问题二 仓库下载的资源与项目资源版本不一致 本地跑好久的一个项目,现在需要部署在Jenkins上面进行自动化打包部署;想着部署后今后可以省下好多时间,遂兴高采烈地去部署&am…

基于去哪儿旅游出行服务平台旅游推荐网站【源码+安装+讲解+售后+文档】

【1】系统介绍 研究背景 随着互联网技术的飞速发展和移动互联网的普及,人们的旅游消费习惯发生了显著变化。在线旅游服务逐渐成为人们计划旅行、预订酒店、机票以及制定行程的主要方式之一。去哪儿网作为国内领先的在线旅游平台之一,通过整合众多旅游资…

提升数据处理效率:TDengine S3 的最佳实践与应用

在当今数据驱动的时代,如何高效地存储与处理海量数据成为了企业面临的一大挑战。为了解决这一问题,我们在 TDengine 3.2.2.0 首次发布了企业级功能 S3 存储。这一功能经历多个版本的迭代与完善后,逐渐发展成为一个全面和高效的解决方案。 S3…

python 实现一个简单的浏览器引擎

1. 浏览器引擎工作原理 浏览器引擎是用来处理、渲染和显示网页内容的核心组件。其主要任务是将用户输入的URL所代表的网页资源加载并呈现出来,通常包括HTML、CSS、JavaScript以及各种多媒体内容。浏览器引擎的工作原理可以分为以下几个主要步骤: 1.1 U…

软件系统建设方案书(word参考模板)

1 引言 1.1 编写目的 1.2 项目概述 1.3 名词解释 2 项目背景 3 业务分析 3.1 业务需求 3.2 业务需求分析与解决思路 3.3 数据需求分析【可选】 4 项目建设总体规划【可选】 4.1 系统定位【可选】 4.2 系统建设规划 5 建设目标 5.1 总体目标 5.2 分阶段目标【可选】 5.2.1 业务目…

FlinkSQL之temporary join开发

在实时开发中,双流join获取目标对应时刻的属性时,经常使用temporary join。笔者在流量升级的实时迭代中,需要让流量日志精准的匹配上浏览时间里对应的商品属性,使用temporary join开发过程中踩坑不少,将一些经验沉淀在…

【鼠鼠学AI代码合集#8和9】线性神经网络

深度学习中的矢量化加速 在深度学习模型的训练过程中,处理大量数据的效率对模型性能至关重要。为此,我们通常希望能够在一次操作中处理整个小批量的样本,而不是逐一处理每个样本。这种优化方式称为矢量化。通过矢量化,我们可以充…

【开源免费】基于SpringBoot+Vue.JS网上超市系统(JAVA毕业设计)

本文项目编号 T 037 ,文末自助获取源码 \color{red}{T037,文末自助获取源码} T037,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

C++学习笔记----9、发现继承的技巧(六)---- 有趣且令人迷惑的继承问题(2)

2、给继承类添加虚基类成员函数的重载 给继承类添加新的虚基类成员函数的重载是可能的。也就是说,可以用新的原型给继承类中的虚成员函数添加重载,但是继续继承基类版本。这个技术使用了using声明来显式包含了继承类中的成员函数的基类定义。下面为示例&…

研发运营一体化(DevOps)能力成熟度模型

目录 应用设计 安全风险管理 技术运 持续交付 敏捷开发管理 基于微服务的端到端持续交付流水线案例 应用设计 安全风险管理 技术运 持续交付

Spring-SpringMVC-SpringBoot理解

Spring是一个完整的框架,能够解决全栈的问题,核心是IOC控制反转和AOP面向切面。 SpringMVC只是Spring的一个模块module,属于Spring框架中WEB层的一部分。 即SpringMVC归属于Spring,不是一个独立的框架 由于SpringMVC配置繁杂使…

关于非中文或者url文本不换行的问题

我在一个写一个简单的url展示的时候,发现url一直溢出不换行,查了各种方法不管用,我请教了我大哥,他直接甩给我两个css放进去就好了 word-break:break-all; 按字符截断换行 /* 支持IE和chrome,FF不支持*/ word-w…

Android 判断手机放置的方向

#1024程序员节|征文# 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 需求 老板:我有个手持终端,不能让他倒了,当他倒或者倾斜的时候要发出报警; 程序猿:我这..... 老板…

机器学习4

第3章 线性模型 3.1 线性模型的基本形式 3.1.1 线性模型的核心公式 线性模型通过属性的线性组合进行预测,其核心公式为: [ f(x) \omega_1 X_1 \omega_2 X_2 … \omega_d X_d b ] 其中: ω 1 , ω 2 , . . . , ω d \omega_1, \omega_…

医疗实施-项目管理06-估算成本

估算成本 估算成本介绍作用注意事项 常见的估算方法自上而下估算数据分析-储备分析三点估算PERT 常见的估算分类根据产品进行估算根据实施计划估算 估算成本介绍 作用 估算成本是对完成项目所需资源成本进行类似估算的过程。 作用:确定项目所需资金 注意事项 注…

2024-09-28 地址空间与进程控制

一、进程地址空间 Pt.2 同一个变量,地址相同,其实是虚拟地址相同,内容不同其实是被映射到了不同的物理地址 1. 页表 内存保护与页表标志位 在操作系统中,页表用于管理内存的访问权限。每个页表项通常包含一组标志位&…