首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从AbstractUser继承后,Django admin不能再更改用户的权限

。AbstractUser是Django框架中提供的一个抽象用户模型,用于扩展默认的用户模型。当我们从AbstractUser继承创建自定义用户模型后,Django admin默认的用户管理界面将无法更改用户的权限。

在Django中,用户权限是通过权限系统来管理的。权限系统允许管理员为用户分配不同的权限,以控制其对系统资源的访问和操作。然而,当我们使用AbstractUser创建自定义用户模型后,Django admin默认的用户管理界面将不再显示权限相关的选项,因此无法直接更改用户的权限。

要解决这个问题,我们可以通过自定义用户管理界面来实现更改用户权限的功能。具体步骤如下:

  1. 创建一个自定义的用户管理界面(admin.py文件):
代码语言:txt
复制
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import Permission

from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    model = CustomUser
    list_display = ('username', 'email', 'is_staff', 'is_active',)
    list_filter = ('is_staff', 'is_active',)
    fieldsets = (
        (None, {'fields': ('username', 'password')}),
        ('Personal Info', {'fields': ('email',)}),
        ('Permissions', {'fields': ('is_staff', 'is_active',)}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('username', 'password1', 'password2', 'is_staff', 'is_active',),
        }),
    )
    search_fields = ('username', 'email',)
    ordering = ('username',)

admin.site.register(CustomUser, CustomUserAdmin)
admin.site.register(Permission)
  1. 在settings.py文件中指定自定义的用户模型和用户管理界面:
代码语言:txt
复制
AUTH_USER_MODEL = 'your_app.CustomUser'

通过以上步骤,我们创建了一个自定义的用户管理界面CustomUserAdmin,并将其注册到Django admin中。在这个自定义界面中,我们可以通过设置list_display、list_filter、fieldsets等属性来定义显示的字段和过滤选项。同时,我们也可以通过add_fieldsets属性来定义添加用户时的字段。

需要注意的是,自定义用户管理界面中的权限相关选项是通过注册Permission模型来实现的。在上述代码中,我们通过admin.site.register(Permission)将权限模型注册到Django admin中,以便在用户管理界面中显示权限相关选项。

总结:通过从AbstractUser继承创建自定义用户模型后,Django admin默认的用户管理界面无法更改用户的权限。为了解决这个问题,我们可以通过自定义用户管理界面和注册权限模型来实现更改用户权限的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

自定义Django认证系统技术方案

user_obj.username == settings.ADMIN_LOGIN 可以根据业务编写具体判断逻辑,给不同用户/组授予不同权限。...Django除了User模型,还有2个抽象模型AbstractUser和AbstractBaseUser,源码中可以看到它们继承关系: class User(AbstractUser):...继承AbstractUser 除了代理模型和OneToOneField,扩展User新方式是定义新MyUser并继承AbstractUser,把User替换掉,添加额外信息。...继承AbstractBaseUser 继承AbstractUser只能做扩展,如果我们想完全自定义用户模型,那么就需要继承AbstractBaseUser,重写属性和方法。...重写权限 AbstractUser定义可以看到是继承了PermissionsMixin类: class AbstractUser(AbstractBaseUser, PermissionsMixin

1.2K10

Django(60)Django内置User模型源码分析及自定义User

大家好,又见面了,我是你们朋友全栈君。 前言 Django为我们提供了内置User模型,不需要我们额外定义用户模型,建立用户体系了。...User模型源码分析 class User(AbstractUser): """ Django 身份验证系统中用户由该模型表示 需要用户名和密码。...(父类PermissionsMixin属性) user_permissions:权限。一个用户可以拥有多个权限,一个权限可以被多个用户所有用。和Permission属于一种多对多关系。...对于一些想要删除账号数据,我们设置这个值为False就可以了,而不是真正数据库中删除。 is_superuser:是否是超级管理员。如果是超级管理员,那么拥有整个网站所有权限。...继承AbstractUser   对于authenticate不满意,并且不想要修改原来User对象上一些字段,但是想要增加一些字段,那么这时候可以直接继承django.contrib.auth.models.AbstractUser

1.6K20

Django User 模块之 AbstractUser 扩展详解

顺着读Django 各模块源码,我们可以更灵活地更改代码以实现自己想要功能。 现在,思考一个问题,主需求是实现博客中用户注册登录登出功能。...… 你可以看出,User 模块继承AbstractUser 抽象基类,而仅仅只是继承了,并没有对 AbstractUser 进行任何扩展。...所以,对于一个需要更多需求 User 模块信息来说,我们可以继承 AbstractUser 并根据自己需求进行扩展。...删除之后,重新进行数据库迁移 $ python manage.py makemigrations myapp $ python manage.py migrate 这个时候,所使用用户即为自定义用户了...内置用户AbstractUser 我们在之前讲过了model模型作用和父类作用,这次介绍内置用户AbstractUser就是Django内置一个关于用户操作类,它极大地方便了我们对model

1.9K10

自定义 DjangoUser Model,扩展 AbstractUser类注意事项

在你有表格被创建更改此设置是不被 makemigrations 支持,并且会导致你需要手动修改数据库结构,用户表中导出数据,可能重新应用一些迁移。...是必需 4.扩展Django默认User 如果你完全满意Django用户模型和你只是想添加一些额外属性信息,你只需继承 django.contrib.auth.models.AbstractUser...如果你用户模型扩展于 AbstractBaseUser,你需要自定义一个ModelAdmin类。他可能继承于默认django.contrib.auth.admin.UserAdmin。...7.自定义用户权限 如果想让在自定义用户模型中包含Django权限控制框架变得简单,Django提供了PermissionsMixin。...它提供给你所有Django权限类所必须方法和字段 7.1 如果要定制User权限系统,最简单方法是继承PermissionsMixin 源码: class PermissionsMixin(models.Model

6K20

django 关于User模型

经过哈希过后密码。 groups:分组。一个用户可以属于多个分组,一个分组可以拥有多个用户。groups这个字段是跟Group一个多对多关系。 user_permissions:权限。...一个用户可以拥有多个权限,一个权限可以被多个用户所有用。和Permission属于一种多对多关系。 is_staff:是否可以进入到admin站点。代表是否是员工。...但是有时候还是不能满足我们需求。比如在验证用户登录时候,他用用户名作为验证,而我们有时候需要通过手机号码或者邮箱来进行验证。还有比如我们想要增加一些新字段。...继承AbstractUser: 对于authenticate不满意,并且不想要修改原来User对象上一些字段,但是想要增加一些字段,那么这时候可以直接继承django.contrib.auth.models.AbstractUser...继承自AbstractBaseUser模型: 如果你想修改默认验证方式,并且对于原来User模型上一些字段不想要,那么可以自定义一个模型,然后继承自AbstractBaseUser,添加你想要字段

1.1K30

django 自带 user 字段扩展及头像上传

通过继承 AbstractUser 来实现 首先需要在 models.py 文件中创建自己 user model from django.contrib.auth.models import AbstractUser...from django.db import models # 有个坑,扩展字段密码会明文,当我们提交时候需要进行设置,在后面的代码中会提到 class User(AbstractUser):...这种方法适合只需要扩展 User Model 中字段,会继承之前 AbstractUser 全部字段,系统自带 User 也是通过继承 AbstractUser 来实现 # 系统 User 源码...,没完全懂小伙伴继续跟上节奏~首先我们需要添加权限,需要用户登录才可以进行修改或者上传头像,所以指定 permission_classes 为 permissions.IsAuthenticated...如果是在本地测试,数据库显示文件地址会是你本地项目的地址,但是当你客户端发出请求,收到会是服务器地址,没毛病,不要以为自己保存路径错了。

2.1K30

Django官方文档小结(四) -- 用户权限

Django 用户权限 #1 环境 Python3.7.3 Django==2.0.7 #2 用户 #2.1 User对象 这里推荐使用 AbstractUser, 而不是User 使用方法 from...在settings.py中配置 AbstractUser AUTH_USER_MODEL = 'app名.UserProfile' 普通用户创建 创建用户最直接方法是使用包含 create_user...超级管理员email字段不能为空 >>> models.UserProfile.objects.create_superuser(username="admin",password="cox123456...",email="job@minhung.me") #2.2 用户密码管理 密码更改 >>> user_obj = models.UserProfile.objects.get...# 因为之前已经把用户权限全部清空,用户被加到权限, # 会拥有权限权限,但是并不是自己权限,在数据库中没有记录,数据库只会记录用户在哪个权限组 如何查看用户是否拥有权限??

41630

解决更改AUTH_USER_MODEL出现问题

使用django自带 AbstractUser 扩展之后,更改AUTH_USER_MODEL = ‘users.UserProfile’属性,进行数据库迁移时, 出现如下报错: ValueError...取消注释,则报unique错误,app必须唯一 经过仔细查询,找到解决办法,并尝试解决成功: 找到自己/python3X/lib/site-packages/django/contrib/admin.../migrations文件夹,把里面除了__init__.py所有文件,全部删了makemigrations就可以了 补充知识:自定义userprofile覆盖默认user表 一、创建users..." verbose_name_plural = verbose_name def __str__(self): return self.username 三、在setting.py中更改用户模型...+ AUTH_USER_MODEL = “users.UserProfile” 以上这篇解决更改AUTH_USER_MODEL出现问题就是小编分享给大家全部内容了,希望能给大家一个参考

1.9K40

15.Django基础十一之认证系统

一个用户可以拥有多个权限,一个权限可以被多个用户所有用。和Permission属于一种多对多关系。 is_staff:是否可以进入到admin站点。代表是否是员工。...继承AbstractUser: 作用: 给模型增加新字段, 修改户验证方法: authenticate 局限: 只能增加, 不能减少字段 坏处: 破坏了原来User模型表结构 对于authenticate...同时还要继承PermissionsMixin 如果你想修改默认验证方式,并且对于原来User模型上一些字段不想要,那么可以自定义一个模型,然后继承自AbstractBaseUser,添加你想要字段...我们可以通过继承内置 AbstractUser 类,来定义一个自己Model类。django给我们自动创建一张user表,而如果要用auth模块,就必须要使用(或继承)这张表。   ...写法如下: # 引用Django自带User表,继承使用时需要设置,这样django就知道我们app名应用下models文件中去查找UserInfo这张表了 AUTH_USER_MODEL =

2.1K20

重新整理django中Auth模块

写法如下: # 引用Django自带User表,继承使用时需要设置 AUTH_USER_MODEL = "app名.UserInfo" 在modles.py创建表单模型可以对AbstractUser进行继承因为我们可以源码中看出来...auth自带user表示继承AbstractUser类,所有我们可以可以同样继承然后对于他内容进行自定义 from django.contrib.auth.models import AbstractUser...first_name:姓 last_name:名 email:邮箱 is_staff : 用户是否拥有网站管理权限. is_active: 是否允许用户登录, 设置为 False,可以在不删除用户前提下禁止用户登录...再看他另外父级PermissionsMixin is_superuser:是否为超级账号也就管理员 groups:分组 user_permissions:用户权限 我们可以这基础上进行新增 二.注册相关...若用户没有登录,则会跳转到django默认 登录URL '/accounts/login/ ' 并传递当前访问url绝对路径 (登陆成功,会重定向到该路径)。

1K10

Django之auth组件

一、Auth模块是什么   django内置用户认证系统 ,可以快速 实现,登录,注销,修改密码......也就是在auth_user这个表中插入了一条数据(密码 是加密,所以我不能手动插入)   2、验证用户: from django.contrib import auth     user=auth.authenticate...():  如果通过验证,输出true,反之false 11、其他方法(了解) is_active:禁止 登录网站(用户好存在,封号 ) is_staff:是否对网站有管理权限(能不能登录admin)...): phone=models.CharField(max_length=32) # 一对一跟auth_user表做关联 # 如果是外部引入表模型,是不能加引号 # 如果加引号,只是在当前model...找 user=models.OneToOneField(to=User) 方法二: 2、定义一个表模型,继承(AbstractUser) from django.contrib.auth.models

65120

Django项目知识点(二)

用户注册 官方文档 django强大之处在于开发效率高,内置了权限模块之类很多常用功能。django内置权限系统有大自定义功能扩展,不需要重复造轮子。...= 'user.User' 6.1 UserManager UserManager这是django用户管理者 通过python manage createsupermanage来创建超级用户,但是有的时候还需要超级用户其他字段...,如email user app下model from django.contrib.auth.models import AbstractUser,UserManager as _UserManager...通过上面改写UserManagercreate_superuser创建超级用户可以不提供email字段 6.2 AbstractUser AbstractUser这是django特定抽象用户 导入方式...: from django.contrib.auth.models import AbstractUser 创建用户model,继承AbstractUser class User(AbstractUser

75530

4.寻光集后台管理系统-用户管理(用户表)

背景 页面中有很多功能,对于不同权限需要展示不同页面,不同权限可以操作范围也不同,所以需要进行登录操作,并进行权限管理。...INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes...', 'users.apps.UsersConfig', ] 用户模块 Django有自带了一个用户管理模块,所以不再从头编写,而是基础上进行二次开发 用户Django自带用户管理模块...models.py文件为: from django.contrib.auth.models import AbstractUser 简单看一下AbstractUser和它父类 它里面包含了很多登录常用字段了...from django.db import models from django.contrib.auth.models import AbstractUser from django.core.exceptions

64420

django admin管定制-显示字段实例

先说需求: 1、django 自带了admin管,如果我们需要使用,只需把我们定义models注册即可; 2、但如果只是简单注册,那显示很简单,根本看不到每行记录描述信息,全部以model object...自定义用户表和使用admin来管理数据库 django 自定义用户表 在使用django操作数据库时,django中生成默认User表,其中字段已经可以满足我们日常需求。...但有时候,我们自己需要更多字段,我们就可以自定义用户表。来替换django自带User表。...' verbose_name_plural = verbose_name 注意,User类需要继承AbstractUser; 在settings.py 中添加: AUTH_USER_MODEL...以上这篇django admin管定制-显示字段实例就是小编分享给大家全部内容了,希望能给大家一个参考。

2.9K20

Python进阶42-drf框架(四)

(s、m、h)、频率次数(3/s) # 没有达到限次:正常访问接口 # 达到限次:限制时间内不能访问,限制时间达到,可以重新访问 self.check_throttles(request...) """ 权限六表分析 基于用户权限访问认证: RBAC (Role Based Acess Control) 自己简单了解:基于auth认证规则 Django框架采用是RBAC认证规则...,RBAC认证规则通常分为三表规则、五表规则,Django采用是六表规则 三表规则: 1.用户表 2.角色表 3.权限表 五表规则: 1.用户表 2.角色表 3.权限表 4.用户角色关联表...') ## 合法用户还需要从auth_list[1]中解析出来 ## 假设一种情况:信息为abc.123.xyz,就可以解析出admin用户;实际开发,该逻辑一定是校验用户正常逻辑...""" 1) 创建继承BasePermission权限类 2) 实现has_permission方法 3) 实现体根据权限规则 确定有无权限 4) 进行全局或局部配置 认证规则 i.满足设置用户条件

1.6K20
领券