django提供四种拓展模型的方法:

1.代理模型

2.Profile拓展模型User

3.AbstractBaseUser拓展模型User

4.AbstractUser拓展模型

之前想通过第四种方法拓展User模型,对原有User模型影响较少而且不需要创建数据表,但是由于项目的其他模型已经使用User作为一对多或者多对多的外键,导致替换过程有很多错误,没能解决而放弃该方法,所以建议大家在项目开始做前就使用该方法拓展User模型。

下面简单介绍一下该方法:

1.新建APP user,在user的model.py文件下定义模型MyUser:

class MyUser(AbstractUser):
qq = models.CharField('QQ号码',max_length=16) def __str__(self):
return self.username

2.在项目的setting.py中配置相关信息:

AUTH_USER_MODEL='user.MyUser'

3.然后执行数据迁移

方法二:Profile拓展模型User

该方法会新建数据表,适合用在项目完成过程中

1.创建app UserProfile,在他的model.py文件下添加如下代码:

from django.contrib.auth.models import User
from django.db import models # Create your models here. class UserProfile(models.Model):
user = models.OneToOneField('auth.User',related_name='profile_user')
pid = models.ForeignKey('auth.User',verbose_name='上级用户',related_name='profile_pid') class Meta:
db_table = "bjra_userprofile"

2.执行数据迁移:python manage.py makemagrations  和 python manage.py migrate

3.添加以及修改时将其添加到界面中,需要重新注册User模型

在UserProfile/adminx.py文件夹下添加

class ProfileInline(object):
model = UserProfile
fk_name = 'user'
#raw_id_fields = ("pid",)
verbose_name = '上级用户'
verbose_name_plural = verbose_name
class UserProfileAdmin(object):
inlines = [ProfileInline]
list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff')
xadmin.site.unregister(User) #去掉在admin中的注册
xadmin.site.register(User, UserProfileAdmin) #用userProfileAdmin注册user

遇到的问题:由于UserProfile模型中存在多个外键关联同一模型User的情况,(第一个user与User模型是一对一关系,pid是指该用户的上级用户,因此是User的外键)因此在model中要指明其related_name的值,并且在ProfileInline中也要利用fk_name = 'user'来指定

(模型上的外键名称。在大多数情况下,将自动处理,但fk_name如果同一父模型有多个外键,则必须明确指定。)

参考官方文档:

django xadmin拓展User模型的更多相关文章

  1. django用户认证系统——拓展 User 模型

    Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...

  2. django用户认证系统——拓展 User 模型2

    Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...

  3. django xadmin多对多字段过滤(含filter的反向查询)

    要实现的功能: 继昨天实现拓展User模型使其得到其上级用户,今天要实现某些模型与用户多对多字段过滤功能. 功能描述:以用户指派功能为例,当前用户将文件指派给多个下级,修改前 程序会将所有用户都显示出 ...

  4. 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明

    第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明 设置后台列表页面可以直接修改字段内容 在当前APP里的adminx.py文件里的 ...

  5. 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表

    第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表.验证码表.轮播图表 创建Django项目 项目 settings.py ...

  6. Python升级3.6 强力Django+Xadmin打造在线教育平台

    第 1 章 课程介绍 1-1 项目演示和课程介绍: 第 2 章 Windows下搭建开发环境 2-1 Pycharm.Navicat和Python解释器的安装: Pycharmhttp://www.j ...

  7. Django - Xadmin (五) POP

    Django - Xadmin (五) POP 功能及逻辑描述 pop 功能:在添加数据时,对于需要选择的多对多字段,在其 input 框边加上一个按钮,点击该按钮可以实现跳转到添加该字段数据的页面: ...

  8. Django - Xadmin (四) Filter

    Django - Xadmin (四) Filter Filter 功能描述 与 admin 组件中 Filter 功能类似,在展示页面右侧放置一列标签,通过点击这些标签来筛选出该标签相关的数据. 比 ...

  9. Django+xadmin打造在线教育平台(二)

    三.xadmin后台管理 3.1.xadmin的安装 django2.0的安装(源码安装方式): https://github.com/sshwsfc/xadmin/tree/django2 把zip ...

随机推荐

  1. mybatis 日志的使用以及设计

    1.为什么要配置mybtis的logger? mybatis自己设计以及实现了org.apache.ibatis.logging.Log接口. Mybatis为了避免对第三方的日志包存在强依赖,内部的 ...

  2. 最大化等比例测试演化Demo-传统方法

    demo-1: <!doctype html> <html> <head> <meta charset="utf-8"> <t ...

  3. iOS XML解析使用-韩国庆

    欢迎-------(北京-iOS移动开发金牌教师QQ:2592675215)韩老师给你带来XML解析课程 今天给大家讲解下xml解析的第三方简单用法:首先我解释下,json和xml解析格式. JSON ...

  4. Vue 路由的嵌套

    1.配置路由 const routes = [ { path: '/User', component: User, children: [{ path: 'OP1', component: OP1 } ...

  5. bs4源码

    Beautiful源码: """Beautiful Soup Elixir and Tonic "The Screen-Scraper's Friend&quo ...

  6. 逆向工程vgenerator(一)

    前言 想要自己实现一个mybatis-generator类似的轮子,目前只实现MySQL部分的方法.利用下班时间,写了一个小项目,实现了这个功能.我准备分成三篇博客来写这个东西. 基类 /** *基类 ...

  7. Mac 端配置 Lua 环境

    一.设计目的 Lua 是一种轻量级的脚本语言,其目的是为了嵌入到程序中,从而为程序提供灵活的扩展和定制功能. 二.特性 轻量级:编译后仅仅 100 余K,可以很方便的嵌入到程序中. 可扩展:Lua 提 ...

  8. PHP截取特定字符串前后

    $email   =  '13366540193@163.com' ;$domain  =  strstr ( $email ,  '@' );echo  $domain ;  // 打印 @163. ...

  9. 列表推导式和sum的用法

    作者:杨航锋链接:https://www.zhihu.com/question/57470958/answer/153405326来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  10. python学习(一)--python解释器

    python学习模式,每篇都会有一些总结,然后根据总结去查一查,学一学,基础就会很扎实的 python解释器 1.python版本和安装 python2.x和python3.x https://www ...