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安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
使用Python脚本生成随机IP的简单方法
Jul 30 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
python列表,字典,元组简单用法示例
Jul 11 Python
Python Django 添加首页尾页上一页下一页代码实例
Aug 21 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
Python写出新冠状病毒确诊人数地图的方法
Feb 12 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
python中sort sorted reverse reversed函数的区别说明
May 11 Python
Python面向对象之成员相关知识总结
Jun 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
php 字符转义 注意事项
2009/05/27 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
代码生成器 document.write()
2007/04/15 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
2013/05/07 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
2016/08/10 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
JSON与String互转的实现方法(Javascript)
2016/09/27 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
vue实现购物车案例
2020/05/30 Javascript
[01:14:05]《加油DOTA》第四期
2014/08/25 DOTA
Python实现类的创建与使用方法示例
2017/07/25 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
Python3 max()函数基础用法
2019/02/19 Python
Django Docker容器化部署之Django-Docker本地部署
2019/10/09 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
viagogo法国票务平台:演唱会、体育比赛、戏剧门票
2017/03/27 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
数控专业个人求职信范例
2013/11/29 职场文书
大学运动会通讯稿
2014/01/28 职场文书
交通事故协议书范文
2014/04/16 职场文书
结婚老公保证书
2015/02/26 职场文书
英语导游欢迎词
2015/09/30 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书