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 相关文章推荐
php使用递归与迭代实现快速排序示例
Jan 23 Python
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 Python
Python浅拷贝与深拷贝用法实例
May 09 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
python实现连续图文识别
Dec 18 Python
Django REST framework视图的用法
Jan 16 Python
pygame实现贪吃蛇游戏(上)
Oct 29 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
python的help函数如何使用
Jun 11 Python
关于Python中*args和**kwargs的深入理解
Aug 07 Python
python 远程执行命令的详细代码
Feb 15 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
追求程序速度,而不是编程的速度
2008/04/23 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
php使用session二维数组实例
2014/11/06 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
jQuery 使用手册(二)
2009/09/23 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python常用模块用法分析
2014/09/08 Python
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
Myprotein亚太地区:欧洲第一在线运动营养品牌
2020/12/20 全球购物
PHP面试题-$message和$$message的区别
2015/12/08 面试题
运动会开幕式主持词
2014/03/28 职场文书
本溪水洞导游词
2015/02/11 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
使用JS实现简易计算器
2021/06/14 Javascript
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers