django 解决扩展自带User表遇到的问题


Posted in Python onMay 14, 2020

首先要扩展自带的auth_user表我就放个图吧,

django 解决扩展自带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文件

django 解决扩展自带User表遇到的问题

文件中的name=‘users'代表着django可以识别该名称为这个APP的名称,于是就可以在settings.py文件中进行注册APP了:

django 解决扩展自带User表遇到的问题

还需要配置一个参数:AUTH_USER_MODEL = 'users.UserProfile'

django 解决扩展自带User表遇到的问题

最后迁移数据库,使用makemigrations 和 migrate 就可以完成user表的扩展了,刷新数据库,表是不是已经生成了0.0

以上这篇django 解决扩展自带User表遇到的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python字符串处理函数简明总结
Apr 13 Python
使用Python对IP进行转换的一些操作技巧小结
Nov 09 Python
简单掌握Python中glob模块查找文件路径的用法
Jul 05 Python
python实现textrank关键词提取
Jun 22 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
python画图把时间作为横坐标的方法
Jul 07 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
Dec 31 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
python 如何设置守护进程
Oct 29 Python
关于python scrapy中添加cookie踩坑记录
Nov 17 Python
django 认证类配置实现
Nov 11 Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 #Python
Python基于numpy模块实现回归预测
May 14 #Python
Django之全局使用request.user.username的实例详解
May 14 #Python
Django使用Profile扩展User模块方式
May 14 #Python
python网络编程之五子棋游戏
May 14 #Python
Jupyter notebook如何修改平台字体
May 13 #Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 #Python
You might like
php实现快速排序法函数代码
2012/08/27 PHP
php curl常用的5个经典例子
2017/01/20 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
js螺旋动画效果的具体实例
2013/11/15 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
python实现简单的socket server实例
2015/04/29 Python
六个窍门助你提高Python运行效率
2015/06/09 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
一行代码让 Python 的运行速度提高100倍
2018/10/08 Python
解决Python一行输出不显示的问题
2018/12/03 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
python集合删除多种方法详解
2020/02/10 Python
python实现梯度法 python最速下降法
2020/03/24 Python
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
埃弗顿足球俱乐部官方网上商店:Everton Direct
2018/01/13 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
荣耀商城:HIHONOR
2020/11/03 全球购物
简历中自我评价分享
2013/10/09 职场文书
技术比武方案
2014/05/19 职场文书
中学团支部工作总结
2015/08/13 职场文书
导游词之西安骊山
2019/12/03 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android
浅谈JavaScript作用域
2021/12/06 Javascript
使用python绘制横竖条形图
2022/04/21 Python