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中正则表达式的使用详解
Oct 17 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
python MySQLdb使用教程详解
Mar 20 Python
windows下python安装pip图文教程
May 25 Python
Python设计模式之备忘录模式原理与用法详解
Jan 15 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
python中p-value的实现方式
Dec 16 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 Python
python使用paramiko实现ssh的功能详解
Mar 06 Python
用python对excel查重
Dec 07 Python
Python使用openpyxl复制整张sheet
Mar 24 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+javascript液晶时钟
2006/10/09 PHP
基于PHP文件操作的详解
2013/06/05 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
合并table相同单元格的jquery插件分享(很精简)
2011/06/20 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
基于jQuery+JSON的省市二三级联动效果
2015/06/05 Javascript
jquery自定义表格样式
2015/11/23 Javascript
JavaScript中的return语句简单介绍
2015/12/07 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
vue实现文件上传读取及下载功能
2020/11/17 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
阿里健康大药房:阿里自营网上药店
2017/08/01 全球购物
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
护士求职推荐信范文
2013/11/23 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题