django 解决扩展自带User表遇到的问题
作者:肿肿的猴子 发布时间:2022-04-23 10:48:43
首先要扩展自带的auth_user表我就放个图吧,
同时setting中应该设置:
# 此处重载是为了使UserProfile生效
AUTH_USER_MODEL = "EcdsApp.UserProfile"
本人的项目需要对此表进行扩展,再建两个子表关联这个表,关联关系为一对一:
修改完成之后进行子表关联:
from django.contrib.auth.models import AbstractUser, User
from django.conf import settings
class UserInfo(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
直接关联肯定会报错,此时加入上面两段代码,
第一个是引入 setting
第二个是在关联字段哪里将原有的User 更换为setting.AUTH_USER_MODEL
此时再次迁移应该就能成功了,
能够迁移成功但是还会有问题。
我后面的功能代码中原先写的有用到;User这个表的地方,代码运行到这里就会出错。
报错信息如下
AttributeError: Manager isn't available; 'auth.User' has been swapped for 'EcdsApp.UserProfile'
原因是原User表已经发生改变这里也需要变动一下:
from django.contrib.auth import get_user_model
User = get_user_model()
直接将这两行加入到你所有使用到原User表的py文件中,基本问题就可以解决!
补充知识:Python+ django + pycharm项目之扩展默认user表
django为我们提供了默认的user表,但是在实际的开发项目的基本是不满足实际情况的,所以呢学习web知识,扩展默认user表是必不可少的一部分,虽然很简单,但是呢还是在此来加深下自己的记忆。
在django项目中,所有的数据库表都是根据各APP的模型来生成的,我们创建项目后第一件事就是要去完善user表,这个利用的知识点就是Python类的继承,假如,我要创建UserProfile类来继承原来的AbstractUser类,从而继承原来user表的字段,又可以增加自己需要的字段:
在users 用户app的models.py做如下的修改:
from django.db import models
from django.contrib.auth.models import AbstractUser # 引入原来的Abstract类
# 创建新的类来继承原来的类,并拓展自己的字段
class UserProfile(AbstractUser):
nick_name = models.CharField(max_length=20, verbose_name='昵称')
birthday = models.DateField(verbose_name='生日', null=True, blank=True)
gender = models.CharField(choices=(('male', '男'), ('female', '女')), verbose_name='性别', default='feamale', max_length=10)
address = models.CharField(max_length=50, verbose_name='地址', default='')
mobile = models.CharField(max_length=11, verbose_name='联系电话', null=True, blank=True)
image = models.ImageField(upload_to='image/%Y/%m', default='image/default.png', max_length=100)
class Meta:
verbose_name = '用户信息'
verbose_name_plural = verbose_name
def __str__(self):
return self.username
修改了models.py中代码后,需要注册你创建的app,django中是如何来识别你创建的APP呢,查看各APP的apps,py文件
文件中的name=‘users'代表着django可以识别该名称为这个APP的名称,于是就可以在settings.py文件中进行注册APP了:
还需要配置一个参数:AUTH_USER_MODEL = 'users.UserProfile'
最后迁移数据库,使用makemigrations 和 migrate 就可以完成user表的扩展了,刷新数据库,表是不是已经生成了0.0
来源:https://blog.csdn.net/weixin_41963487/article/details/83345327
猜你喜欢
- 本文实例讲述了Scrapy框架基本命令与settings.py设置。分享给大家供大家参考,具体如下:Scrapy框架基本命令1.创建爬虫项目
- 本地虚拟环境开发完成之后,上线过程中需要一一安装依赖包,做个记录如下:CentOS 安装python3.5.3wget https://ww
- 建立随机生成的HTML代码是一件相当容易实现的ASP特性。你可能创建过“每日一帖”、滚动广告等等,只需要稍加点缀就会令你的网站日久弥新。对存
- 在XHTML中定义ID、CLASS都用得上,主要是方面CSS定义样式时能一眼看穿。所以,CSS命名仅作参考。(1)页面结构类容器: cont
- 一、导入所需的库import randomimport cv2from matplotlib import pyplot as pltimp
- 锟拷码和口字码说到乱码问题就不得不提到锟斤拷,这算是非常常见的一种乱码形式,那么它到底是经过何种错误操作产生的呢?下面我们一步步探究。看一个
- python3 默认的是UTF-8格式,但在在用dump写入的时候仍然要注意:如下import jsondata1 = { "Te
- 在python的变量使用中,有时候会赋予多个值一起使用,相信很多人一般都是添加一个值,对于这种多个赋值还没有接触过,其实这是python高级
- 项目说明 该电商项目类似于京东商城,主要模块有验证、用户、第三方登录、首页广告、商品、购物车、订单、支付以及后台管理系统。项目开发模式采用前
- 本文讲述了Python在windows下打印彩色字体的方法。分享给大家供大家参考,具体如下:########################
- 前言这里给大家介绍一下利用Pycharm如何打包文件,并为文件设置图标。一、下载pyinstaller库1)点击win+r,输入cmd打开控
- 1.查看mysql上都有哪些库mysql> show databases \G***************************
- 前言双端队列deque支持从任意一端增加和删除元素。其中,栈和队列就是双端队列的退化形式,它们的输入输出被限制在某一端。基本用法首先,我们来
- 一、前提条件安装了Fiddler了(用于抓包分析)谷歌或火狐浏览器如果是谷歌浏览器,还需要给谷歌浏览器安装一个SwitchyOmega插件,
- 本文实例讲述了python简单实现基数排序算法。分享给大家供大家参考。具体实现方法如下:from random import randint
- 本文介绍了python的构建工具setup.py,分享个大家,具体如下:一、构建工具setup.py的应用场景在安装python的相关模块和
- 随着网络的发展,网速和机器速度的提高,越来越多的网站用到了丰富客户端技术。而现在Ajax则是最为流行的一种方式。JavaScript是一种解
- 描述:让Len,Left,Right函数识别中文;对中文识别为两个字符,ASCII码为一个;可用此函数代替Len,Left,Right函数。
- 问:Perl下应当如何连接Access数据库答:首先需要安装Win32-ODBC模块,具体的步骤如下:1:从TOOLS栏目中下载Win32-
- 这个符合设计标准的三 级向上弹出菜单,纯css代码控制,没有使用javascript脚本,绿色环保,呵呵。兼容性应该更好。截图:<!D