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显示天气预报
Mar 02 Python
整理Python中的赋值运算符
May 13 Python
python嵌套函数使用外部函数变量的方法(Python2和Python3)
Jan 31 Python
Python 快速实现CLI 应用程序的脚手架
Dec 05 Python
Python基于列表模拟堆栈和队列功能示例
Jan 05 Python
Python处理中文标点符号大集合
May 14 Python
基于Python3.6+splinter实现自动抢火车票
Sep 25 Python
python 字符串追加实例
Jul 20 Python
Pytorch 多块GPU的使用详解
Dec 31 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
python3中确保枚举值代码分析
Dec 02 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超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
PHP的反射机制实例详解
2017/03/29 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
PHP实现UTF8二进制及明文字符串的转化功能示例
2017/11/20 PHP
详解php与ethereum客户端交互
2018/04/28 PHP
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
Python语言实现机器学习的K-近邻算法
2015/06/11 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
Django组件cookie与session的具体使用
2019/06/05 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
Weblogic的布署方式
2013/08/23 面试题
应届毕业生的个人自我鉴定
2013/10/24 职场文书
大学军训感言400字
2014/03/11 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
学校通报表扬范文
2015/05/04 职场文书
乔布斯辞职信(中英文对照)
2015/05/12 职场文书
python 制作一个gui界面的翻译工具
2021/05/14 Python
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js