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

如何在ManytoMany字段中对Django管理员隐藏一些用户组

在Django中,可以通过自定义ModelAdmin类来隐藏ManyToMany字段中的用户组。以下是实现该功能的步骤:

  1. 创建一个新的ModelAdmin类,继承自Django内置的admin.ModelAdmin类。
  2. 在新的ModelAdmin类中,重写get_form方法,用于动态修改表单字段。
  3. 在get_form方法中,获取当前登录的管理员用户,并根据需要隐藏的用户组进行过滤。
  4. 使用exclude属性将需要隐藏的用户组从ManyToMany字段中排除。
  5. 将修改后的表单返回。

下面是一个示例代码:

代码语言:txt
复制
from django.contrib import admin
from django.contrib.auth.models import Group

class CustomModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        
        # 获取当前登录的管理员用户
        admin_user = request.user
        
        # 需要隐藏的用户组名称列表
        hidden_groups = ['Group1', 'Group2']
        
        # 根据需要隐藏的用户组进行过滤
        groups_to_exclude = Group.objects.filter(name__in=hidden_groups)
        
        # 使用exclude属性将需要隐藏的用户组从ManyToMany字段中排除
        form.base_fields['groups'].queryset = form.base_fields['groups'].queryset.exclude(id__in=groups_to_exclude)
        
        return form

# 注册你的ModelAdmin类
admin.site.register(YourModel, CustomModelAdmin)

在上述示例中,我们创建了一个名为CustomModelAdmin的自定义ModelAdmin类,并重写了get_form方法。在该方法中,我们获取当前登录的管理员用户,并根据需要隐藏的用户组进行过滤。然后,使用exclude属性将需要隐藏的用户组从ManyToMany字段中排除。最后,将修改后的表单返回。

请注意,上述示例中的"YourModel"应替换为你自己的模型类名。

这样,当管理员访问该模型的编辑页面时,将只显示不包含需要隐藏的用户组的ManyToMany字段选项。

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

相关·内容

Django内置权限扩展案例

Django的内置权限无法满足需求的时候就自己扩展吧~ 背景介绍 overmind项目使用了Django内置的权限系统,Django内置权限系统基于model层做控制,新的model创建后会默认新建三个权限...,在用户组里的用户都有权限,而操作类型经过分析主要有两类读和写,那么需要给每个MySQL实例添加两个字段分别记录对此实例有读和写权限的用户组 如下代码在原来的model基础上添加read_groups和...write_groups字段,DB实例跟用户组应是ManyToManyField多多关系,一个实例可以关联多个用户组,一个用户组也可以属于多个实例 class Mysql(models.Model):...request, 'lPage': _lists}) 实现的思路是:获取登录用户的所有组,然后循环查询每个组有读取权限的数据库实例,最后把每个组有权限读的数据库实例进行合并返回 获取登录用户的所有组用到了ManyToMany...group_list) == 0 else True 实现思路是:根据传入的第三个用户参数,来获取到用户所有的组,然后根据传入的第一个参数类型读取或写入和第二个参数DB实例来获取到有权限的所有组,然后两个组取交集

88820

Django学习笔记之Queryset详解

不过update()的键值的键只能是主表字段,不能是关联表字段,如下 Entry.objects.update(blog__name='foo') #错误,无法修改关联表字段,只能修改Entry...可以使用双下划线OneToOne、OneToMany、ManyToMany进行关联查询和反向关联查询,而且方法都是一样的,: >>> Entry.objects.filter(blog__name=...可以使用双下划线OneToOne、OneToMany、ManyToMany进行关联查询和反向关联查询,方法与filter()的使用方法相同。...的实现 在SQL,很多关键词在删、改、查时都是可以用的,order by、 like、in、join、union、and、or、not等等,我们以查询为例,说一下django如何映射SQL的这些关键字的...聚合函数可以像filter那样关联表,即在聚合函数DjangoOneToOne、OneToMany、ManyToMany关联查询及其反向关联提供了相同的方式,见下面例子。

2.7K30
  • Django实战-信息资讯-CMS权限管理

    一个完整的权限应该包含3个要素: 用户,对象和权限,即什么用户什么对象有什么样的权限。 对于本次项目中的应用,可以分为编辑组、财务组、管理员。...Django 的权限permission 本质是 djang.contrib.auth 的一个模型, 其与 User 的 user_permissions 字段是多多的关系。...② Group 用户组 from django.contrib.auth.models import Group 用户组(Group)和 User 模型是多多的关系。...django.contrib.auth.models.Group 定义了用户组的模型, 每个用户组拥有 id 和 name 两个字段, 该模型在数据库被映射为 auth_group 数据表。...User 对象中有一个名为 groups 的多字段, 多多关系由 auth_user_groups数据表维护。Group 对象可以通过 user_set 反向查询用户组的用户。

    1K10

    Django admin 一些有用的设置

    caption') 2、筛选器 筛选器是Django后台管理重要的功能之一,而且Django为我们提供了一些实用的筛选器。...:“user__user_name” 3、颜色显示 想某些字段设置颜色,可用下面的设置: ?...我们可以对这些字段进行排列设置等。 若不任何设置,如下图所示: ? 这个界面比较简陋,需要稍加设置即可。 1、编辑界面设置 首先多ManyToMany字段设置。...这样,就可以限制 只让管理员看到历史 按钮了。普通用户看不到了: ? 7.单条数据 显示样式的修改  需求如下: ?...9.自定义列表字段 上面的一多和多多可以数据编辑显示,但在列表没有显示。有时还需要显示一些其他东西。例如两个字段相乘计算结果等等。这些都可以通过自定义列表字段处理和显示。

    2.6K70

    django写接口(优化篇)

    作者:Kuky_xs 博客:https://www.jianshu.com/u/9fcd71535294 前言 系列文章: 《django入门:环境及项目搭建》 《django入门:数据模型》 《django...(data) 即可 了解完 Request 和 Response 我们将分别通过 @api_view,APIView 和通用视图类 view 进行一些改造 api_view 注解重构 # ....import...优化后的列表接口信息 我们继续做一些修改,在 post_list 函数中加入 format 参数,默认值设置为 None,接着我们 url 也做一些修改,通过 format_suffix_patterns...在结束文章的最后,记录自己写的时候遇到的一个坑,当更新 ManyToMany 字段的时候,我们需要重新写 post 方法,直接传 id 是不能更新的,直接传 id 是不能更新的,直接传 id 是不能更新的...# 假设我们的 post 有一个 ManyToMany 字段 tags class PostDetailView(APIView): # 更新的时候,需要约定好 ManyToMany

    2.2K20

    Django Xadmin多字段过滤实例

    在xadmin是不能像原生admin那样使用formfield_for_manytomany方法来过滤多字段 ?...补充知识:给django admin后台管理user扩展下拉框及多选框的字段 1.首先在models.py编写扩展User所用到的userProfile模型及下拉框和多选框选项值所需要的模型(因为我所做的下拉框和多选框的值都是从数据库里面取得...),代码如下: 2.第二步编写admin.pyUser字段进行扩展,代码如下: # -*- coding: UTF-8 -*- from django.contrib import admin from...admi台管理User扩展一个下拉框和一个多选框,效果如下图: ?...以上这篇Django Xadmin多字段过滤实例就是小编分享给大家的全部内容了,希望能给大家一个参考。

    1.9K20

    Django ORM详解

    obj.id  obj.name.....就是数据库一行数据的一部分数据 ORM--First: 我们在学习django的orm的时候,我们可以把一多,多多,分为正向和反向查找两种方式。...建表+配置url+views写相应的函数 models.py(在django仅且只能在这里写数据库的相关类) ?...django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。 ? ORM的一多: 我们在设计表结构的时候什么时候使用一多呢?...反向查询:-- 我们可以根据下面的命令,取出一个用户组,那么对于这个用户组他有多少个用户呢? ? 1 models.UserType.objects.get(id=1) ?...Django的F和Q F:用来批量修改数据(使用查询条件的值) demo:比如我有个price这个列,我想让price自增10或者某一些自增10 ?

    1.7K100

    何在 Spring Boot 读写数据

    何在 Spring Boot 读写数据 (5)@Basic 指定类变量读取方法到数据库表字段的映射关系。对于没有任何特殊注解的getXxxx()方法,默认带有 @Basic 注解。...如何在 Spring Boot 读写数据 (7)@Transient 类变量注解,表示该变量不是一个到数据库表的字段映射。...CascadeType.ALL | 以上四种策略 无 | 默认值 因为这四种注解只能表示实体之间几几的关系,指定与所操作实体相关联的数据库表的列字段,就需要用到 @JoinColumn 注解。...,字段默认的命名规则为 “附属类名_附属主键”,:password_id。...@JoinColumn(name = "department_id") private Department department; (4)@ManyToMany(多多) 用户与角色之间是多多的关系

    15.9K10

    django自带权限机制

    这种权限机制只能解决一些简单的应用需求,而大部分应用场景下,需要更细分的权限机制。...以博客系统为例,博客系统的用户可分为『管理员』、『编辑』、『作者』和『读者』四个用户组;博客系统管理员和编辑具有查看、修改和删除所有的文章的权限,作者只能修改和删除自己写的文章,而读者则只有阅读权限。...仍沿用最开始的例子,如果model B有三个实例 B1,B2 和B3,如果我们把B1的可写权限赋予用户A,则A可以修改B1象,而对B2,B3无法修改。...group也一样,如果将B2的可写权限赋予group C,则隶属于group C的所有用户均可以修改B2,但无法修改B1和B3。...结合Django自带权限机制和object permission,博客系统作者的权限控制迎刃而解:系统全局上不允许作者编辑文章,而对于属于作者的具体文章,赋予编辑权限即可。

    1.5K30

    关于“Python”Django 管理网站的核心知识点整理大全52

    在本节,我们将建立管理网站,并通过它 使用模型Topic来添加一些主题。 1. 创建超级用户 Django允许你创建具备所有权限的用户——超级用户。权限决定了用户可执行的操作。...优秀的管理员会小心对待用户的敏感信息,因为用户其访问的应用程序有极 大的信任。...这里我们输 入的是ll_admin,但你可以输入任何用户名,比如电子邮件地址,也可让这个字段为空(见2)。 你需要输入密码两次(见3)。 注意 可能会对网站管理员隐藏有些敏感信息。...向管理网站注册模型 Django自动在管理网站添加了一些模型,User和Group,但对于我们创建的模型,必须 手工进行注册。...这种字段不需要长度限制,因为我们 不想限制条目的长度。属性date_added让我们能够按创建顺序呈现条目,并在每个条目旁边放置 时间戳。 在4处,我们在Entry类嵌套了Meta类。

    16510

    Django来敲门升级版----认证authenticate

    创建超级用户 Django的身份认证系统同样包含了后台管理员身份的操作,创建后台管理员账号如下 python manage.py createsuperuser --username=john --email...权限操作和认证系统 Django为web应用的权限控制提供了一套内建的权限管理系统,可以很方便的进行用户或者用户组权限的管理和认证操作 可以通过后台管理系统直接进行操作,同样的,开发人员可以通过编码的方式进行处理...类似于Django后台系统定义的权限访问方式如下: 访问视图中的’add’表单处理函数并且尝试添加一个对象的情况下,至少需要一个该对象操作的’add’权限才可以 访问视图中的’change’处理函数...内建用户对象有两个多多的字段,分别是group和user_permission,内建用户对象可以通过内建方法很方便的进行用户组的操作和权限的操作 # 用户组操作 myuser.groups.set([...’can publish articles’, content_type=content_type ) 此时就是给指定的类型创建了一个权限对象,这个权限就可以通过user_permission字段添加给指定的某个用户或者用户组

    59530

    Django REST Framework教程(一分钟入门)

    在前后端分离的应用模式,我们通常将后端开发的每一视图都成为一个接口,或者API,前端通过访问接口来对数据进行增删改查 如果项目的需求是后一种情况的话,那么就可以用到Django Rest Framework...2.建好之后的项目结构如下:  在创建的虚拟环境安装Django REST framework:   开发步骤   上面已经安装好环境和包,现在就开始开发了。...2.全局设置,分页和API使用权限问题,指定管理员使用: # 设置权限策略: REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': [...'rest_framework.permissions.IsAdminUser', ], 'PAGE_SIZE': 10 } 3.数据迁移 4.创建管理员账号: 5....如果python测试开发相关技术感兴趣的伙伴,欢迎加入测试开发学习交流QQ群:696400122,不积跬步,无以至千里。

    1.9K30

    何在Hue中使用Sentry为Solr赋权

    对于Solr的赋权其实也是一样的,CDH同时支持在Hue与命令行操作赋权,本文Fayson主要介绍如何在Hue中使用Sentry为Solr赋权。...3.其他前置准备 ---- 确保你学会了在Windows客户端使用浏览器访问Kerberos的CDH的一些Hadoop服务界面。...如果你不会,请参考Fayson之前的文章《如何在Kerberos下使用Solr》和《Windows Kerberos客户端配置并访问CDH》 4.在Hue创建collection以及导入样例数据 --...5.HueSolr的collection赋权测试 ---- 1.使用solr用户登录Hue,创建admin角色,并solr用户组分配所有权限。 选择security模块 ?...6.一旦solr启用Sentry授权以后,solr用户就是管理员,一切管理员操作都需要使用solr用户来操作,我们在Hue也同时要创建solr用户与solr组,这个与我们在Hive/Impala中使用

    1.1K30

    Django(1)初识Django「建议收藏」

    前言 Django是一个开放源代码的Web应用框架,由Python写成,最初用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站,即CMS(内容管理系统)软件,于2005年7月在BSD许可证下发布,这套框架是以比利时的吉普赛爵士吉他手...模板:表现层,处理与表现相关的决定,例如如何在页面或其他类型的文档中进行显示。...:提供可扩展的模板语言,模板之间具有可继承性 表单处理:可以生成各种表单模型,而且表单具有有效性检验功能 Cache系统:完善的缓存系统,可支持多种缓存方式 Auth认证系统:提供用户认证、权限设置和用户组功能...功能的导入由模块Django.urls实现,from Django.urls import include,path,re_path Admin后台系统:支持主流移动设备并新增属性ModelAdmin.autocomplete_fields...100000 Cache(缓存):cache.set_many()现在返回一个列表,包含插入失败的键值 视图类:ContextMixin,extra_context属性允许在View.as_view()添加上下文

    2.8K20

    Django-models & QuerySet API

    django配置mysql数据库 查询queryset时如果需要选取查询集中的某个子集的字段时, 应该用切片,或者first 选择某个子集对象,这样才能够使用到 子集的字段,直接queryset后选择字段会直接报错...blank    为True时,admin可以为空。但是不限制数据库,要想限制数据库里,需要设置null。 choices   选择框。...从数据库查询出来的结果一般是一个QuerySet集合。...(补充)关系型字段一    ForeignKey 多多   ManyToManyField 例如:学生跟老师是多多关系,学生跟学校是多一关系: vim models.py models.ForeignKey...'深大') >>> s.delete() (4, {'formapp.Student_teacher': 1, 'formapp.Student': 2, 'formapp.School': 1}) ManyToMany

    1.4K20

    django 1.8 官方文档翻译: 2-5-6 多数据库

    多数据库 这篇主题描述Django 多个数据库的支持。大部分Django 文档假设你只和一个数据库打交道。如果你想与多个数据库打交道,你将需要一些额外的步骤。...它有意忽略一些复杂的问题,目的是为了演示如何使用路由。 如果myapp的任何一个模型包含与其它 数据库之外的模型的关联,这个例子将不能工作。..._db) return qs Django 的管理站点中使用多数据库 Django 的管理站点没有多数据库的任何显式的支持。...但是Django 官方不支持这种配置。 Contrib 应用的行为 有几个Contrib 应用包含模型,其中一些应用相互依赖。...因为跨数据库的关联是不可能的,这对你如何在数据库之间划分这些模型带来一些限制: contenttypes.ContentType、sessions.Session和sites.Site 可以存储在分开存储在不同的数据库

    1.5K20

    浅谈windows提权

    从低权限到高权限 从普通用户组管理员用户组 ? 什么是权限维持? 隐蔽攻击行为,并且达到长期控制目标的方式就叫做权限维持 ? 一些常用的基础命令: ?...虽然隐藏账户以及在“命令提示符”和“计算机管理”隐藏了,但是有经验的系统管理员还是可以通过注册表编辑器删除隐藏账户 ?...方法二: 新建普通用户 加入管理员用户 给管理员注册表操作权限 将隐藏账户替换为管理员 导出注册表用户文件 删除自己创建的用户 导入注册表文件 激活用户 查看账户隐藏后的结果 远程登陆验证 ?...方法三: 系统漏洞提权 黑客一般都会有自己的入本地提权漏洞利用包 :CVE-2019-0841、CVE-2020-0787等等 ?...如何清除隐藏账户: 1、以$符号创建的账户可在计算机管理本地用户和组查看,可直接删除。

    99620
    领券