django xadmin拓展User模型

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的情况,因此在model中要指明其related_name的值,并且在ProfileInline中也要利用fk_name = ‘user‘来指定

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

参考官方文档:

原文地址:https://www.cnblogs.com/ttzz/p/10752776.html

时间: 2024-11-02 09:18:17

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

django book学习笔记——模型

1.数据库配置 打开settings.py配置文件,找到数据库配置DATABASES,例如: DATABASES = {     'default': {         'ENGINE': 'django.db.backends.mysql', # 使用哪个数据库引擎         'NAME': 'djangodb',                      # 数据库名称         'USER': 'django',                      # 用哪个用户连接数

在Django Xadmin中集成Ueditor

Ueditor是由百度开发的一个开源的富文本编辑器,有人做了一个将其集成到Django中的方案(请戳),但是在xadmin中却无法正常加载编辑器. 其使用了一个模板用来呈现Ueditor的编辑界面 <textarea name={{ UEditor.name }} id=id_{{ UEditor.name }} style="display:inline-block;width:{{ UEditor.width }}px; {{ UEditor.css }}">{{UEd

第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表

第三百七十五节,Django+Xadmin打造上线标准的在线教育平台-创建课程机构app,在models.py文件生成3张表,城市表.课程机构表.讲师表 创建名称为app_organization的课程机构APP,写数据库操作文件models.py models.py文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from __future__ import unicode_literals from datetime import datetim

第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表

第三百七十六节,Django+Xadmin打造上线标准的在线教育平台-创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为app_operation的用户操作APP,写数据库操作文件models.py models.py文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from __future__ import unicode_literals from datetime i

第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装

第三百七十九节,Django+Xadmin打造上线标准的在线教育平台-xadmin的安装 xadmin介绍 xadmin是基于Django的admin开发的更完善的后台管理系统

第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承

第三百八十六节,Django+Xadmin打造上线标准的在线教育平台-HTML母版继承 母板-子板-母板继承 母板继承就是访问的页面继承一个母板,将访问页面的内容引入到母板里指定的地方,组合成一个新页面返回给浏览器 一般母板里都是写的一个网页里不变的地方,也就是通用的地方,被继承页(访问页)都是每个页面不同的地方,也就是将页面不同的地方引入到母板组合成一个新页面返回浏览器 母板里一般都是网页的.头部.底部.头部底部css.头部底部js 被继承页(访问页)里一般都是新内容,新内容的css和js 母

第三百八十节,Django+Xadmin打造上线标准的在线教育平台—将所有app下的models数据库表注册到xadmin后台管理

第三百八十节,Django+Xadmin打造上线标准的在线教育平台-将所有app下的models数据库表注册到xadmin后台管理 将一个app下的models数据库表注册到xadmin后台管理 重点:xadmin的数据表注册,是到app下查找的adminx文件,所以我们必须在app下创建一个adminx.py文件,所有关于数据表注册到xadmin后台的代码都是写在adminx.py文件里 adminx.py文件编写 1.自定义一个类来继承object对象,这个类叫做数据表管理器 数据表管理器里

第三百八十七节,Django+Xadmin打造上线标准的在线教育平台—网站上传资源的配置与显示

第三百八十七节,Django+Xadmin打造上线标准的在线教育平台-网站上传资源的配置与显示 首先了解一下static静态文件与上传资源的区别,static静态文件里面一般防止的我们网站样式的文件,包括ccs,js,网站样式图片 上传资源是用户操作上传的图片等资源 上传资源的配置 1,首先在项目里创建一个名称叫media的文件夹专门保存用户上传 2,settings.py文件配置上传资源的路径 # 上传资源路径,如果图片,上传文件等 MEDIA_URL = '/media/' # 设置上传资源

第三百八十三节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置

第三百八十四节,Django+Xadmin打造上线标准的在线教育平台-路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, include # 导入django自在的include逻辑 from django.contrib import admin from django.views.generic import TemplateView # 导入django自带的TemplateView逻辑 import xadmin #