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

Django M2M与管理员的关系问题,使用带有多选的中间表

Django M2M(Many-to-Many)与管理员的关系问题,涉及到使用带有多选的中间表。在Django中,M2M字段用于表示多对多的关系,它允许一个模型与另一个模型之间建立多对多的关联。

对于与管理员的关系问题,我们可以假设有两个模型:管理员(Admin)和权限(Permission)。管理员可以拥有多个权限,而每个权限也可以被多个管理员拥有。这种关系可以通过使用M2M字段和中间表来实现。

首先,我们需要定义管理员模型和权限模型:

代码语言:txt
复制
from django.db import models

class Admin(models.Model):
    name = models.CharField(max_length=100)
    permissions = models.ManyToManyField('Permission', through='AdminPermission')

class Permission(models.Model):
    name = models.CharField(max_length=100)

class AdminPermission(models.Model):
    admin = models.ForeignKey(Admin, on_delete=models.CASCADE)
    permission = models.ForeignKey(Permission, on_delete=models.CASCADE)

在上述代码中,我们定义了三个模型:Admin(管理员)、Permission(权限)和AdminPermission(中间表)。Admin模型通过M2M字段permissions与Permission模型建立多对多的关联,并通过through参数指定中间表为AdminPermission。

接下来,我们可以在Django的管理界面中使用多选的中间表来管理管理员的权限。为了实现这一点,我们需要自定义一个表单类,并在Admin模型的管理界面中使用该表单类。

代码语言:txt
复制
from django import forms
from django.contrib import admin

class AdminForm(forms.ModelForm):
    permissions = forms.ModelMultipleChoiceField(
        queryset=Permission.objects.all(),
        widget=admin.widgets.FilteredSelectMultiple('Permissions', False),
        required=False
    )

    class Meta:
        model = Admin
        fields = '__all__'

class AdminAdmin(admin.ModelAdmin):
    form = AdminForm

admin.site.register(Admin, AdminAdmin)

在上述代码中,我们定义了一个AdminForm表单类,其中的permissions字段使用了ModelMultipleChoiceField来实现多选功能,并使用了FilteredSelectMultiple小部件来提供一个过滤选择的界面。然后,我们将该表单类应用到Admin模型的管理界面中,通过form属性指定。

现在,我们可以在Django的管理界面中管理管理员的权限了。管理员表单中的权限字段将显示为多选框,可以选择多个权限。

关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,我无法给出具体的链接地址。但是,腾讯云提供了丰富的云计算服务,包括云服务器、云数据库、云存储等,可以根据具体需求选择适合的产品。腾讯云的官方网站上有详细的产品介绍和文档,您可以通过搜索引擎或访问腾讯云官方网站获取更多信息。

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

相关·内容

Django——ContentType(多个建立外键关系)及ContentType-signals使用

一、ContentType  在django中,有一个记录了项目中所有model元数据,就是ContentType,中一条记录对应着一个存在model,所以可以通过一个ContentType...例如,我们在自己app中创建了如下几个model:post,event。迁移之后,我们来查看一下ContentType這个数据中生成数据:   如上图,生成了appmodel对应关系。...要实现这种功能可以在动作发生代码里实现也可以通过数据库触发器等实现,但在django中,一个很简单方法就是使用signals。   ...,为了解决這个问题,我们可以使用ContentType类来实现上述需求。...总之,如果一个与其他有多个外键关系,我们可以通过ContentType来解决这种关联。

4.3K20

用质数解决数据库两需要中间问题如此解决更新用户标签和统计标签使用数量问题

例如 用户、用户标签、用户和标签对应关系  M to M关系。 前提:标签数量有限,否则很多个标签则需要找很多质数,这个时候就需要一个得到质数函数。...解决方案: 用户标签增加一个字段,用一个质数(与其他标签标示质数数字不可重复)来唯一标示这个标签 为用户增加标签时候例如选择标签A(质数3表示)、标签B(质数5表示)、标签C(质数7表示)用户中标签字段存值...105,之后修 改用户标签例如选择了标签A、B则直接更新用户标签字段乘积(15) 如上解决了:更新用户标签。...需要统计某个标签使用人数,在数据库查询语句中 where用户标签乘积字段/某个标签=floor(用户标签乘积字段/某个标签) 意思是得到整数,证明包含那个标签。...如上解决了:统计标签使用数量问题

1.1K20

从0开始做系统

,定义 ?...和小数位decimal_places 8、EmailField ---字符串类型(正则表达式邮箱) =varchar 对字符串进行正则表达式 一个带有检查 Email 合法性 CharField...现在还有一个问题,就是没有汉化。 admin界面汉化 默认admin后台管理界面是英文,对英语盲来说用起来不方便。...详细页面时,只读字段 fieldsets,详细页面时,使用fieldsets标签对数据进行分割显示 详细页面时,M2M显示时,数据移动选择(方向:上下和左右) ordering,列表时,数据排序规则 radio_fields...,详细页面时,使用radio显示选项(FK默认使用select) form = ModelForm,用于定制用户请求时候表单验证 可以参考: django admin高级扩展 简单定制了一下: from

1.4K30

Django内置权限扩展案例

Django内置权限无法满足需求时候就自己扩展吧~ 背景介绍 overmind项目使用Django内置权限系统,Django内置权限系统基于model层做控制,新model创建后会默认新建三个权限...如下代码在原来model基础上添加read_groups和write_groups字段,DB实例跟用户组应是ManyToManyField多对多关系,一个实例可以关联多个用户组,一个用户组也可以属于多个实例...,只是多了一步根据项目和环境再进行判断 需要根据group去反查都有哪些DB实例包含了该组,这里用到了M2Mrelated_name属性:group.read.all() 更多关于Django ORM...,来获取到用户所有的组,然后根据传入第一个参数类型读取或写入和第二个参数DB实例来获取到有权限所有组,然后对两个组取交集,交集不为空则表示有权限,为空则没有 M2M.all()取出来结果是个list...Django有第三方基于object权限管理模块Django-guardian,本项目没有使用主要是因为一来权限需求并不复杂,自己实现也很方便,二来个人在非必要情况下并不喜欢引用过多第三方包,后续升级维护都是负担

86520

Django-多对多关系三种创建方式-forms组件使用-cookiesession-08

目录 模型类多对多关系三种创建方式 django forms 组件 登录功能手写推理过程 整段代码可以放过来 forms 组件使用 forms 后端定义规则并校验结果 forms 前端渲染标签组件...cookie 操作 小练习 如何操作 session 设置 session 获取 session 删除 session 设置 session 超时时间 模型类多对多关系三种创建方式 关系可能还会有一个关系创建时间字段...:自己创建第三张,利用 ManyToManyField 在某张指定关联关系 优点:可以自定义字段,依旧支持基于双下划线、对象反向查询,可扩展性高 多对多字段方法不支持了(add,set,remove...orm 书籍和作者多对多关系是通过 Book2Author 来记录 # through fields 告诉 django orm 记录关系时用过 Book2Author book 字段...内部自动生成一个随机字符串(sha256) 将随机字符串和你要保存数据(默认)写入 django_session 中(先在内存中生成一个缓存记录 等到经过中间时候才会真正地执行)(session

2.8K20

Django进阶之缓存和信号

一、缓存 简介 由于Django是动态网站,所有每次请求均会去数据进行相应操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views返回值保存至内存或者memcache...# 注:执行创建命令 python manage.py createcachetable Memcache缓存(python-memcached模块) # 此缓存使用python-memcached模块连接...,需要在中间最上面添加: 'django.middleware.cache.UpdateCacheMiddleware', 在中间最下面添加: 'django.middleware.cache.FetchFromCacheMiddleware...'中只有process_request方法,所以最开始是直接跳过UpdateCacheMiddleware,然后从第一个到最后一个中间resquest,第一次没有缓存座椅匹配urls路由关系依次进过中间...# djangomodal对象删除后,自动触发 m2m_changed # djangomodal中使用m2m字段操作第三张(add,remove,clear

83790

RBAC-基于角色访问控制

目录 RBAC-基于角色访问控制 什么是RBAC 概念 Django内置RBAC(六) 图解 关系 实操 登录admin操作 普通用户只能查看 添加到组里,增加修改权限 admin二次开发 RBAC...-基于角色访问控制 什么是RBAC 概念 RBAC 是基于角色访问控制(Role-Based Access Control )在 RBAC 中,权限角色相关联,用户通过成为适当角色成员而得到这些角色权限...前面我们说到三大认证,比如权限,普通用户和管理员能够操作接口就不一样,比如我们常见视频软件,不开会员能看视频寥寥无几,这就是权限应用,但是这站在公司角度是对外权限,比如后台管理对公司内使用,...,后台管理开发居多 Django内置RBAC(六) 图解 权限三 权限六 关系 djangoadmin自带rbac权限管理(设计完成权限管理),6张 用户、组(角色、部门...)、权限 ---> 三张 用户和组多对多关系,存在中间 用户和权限多对多关系,存在中间 组和权限多对多关系,存在中间 -----> 三张 实操 models.py from django.db

2.2K21

为什么 Django 能持续统治 Python 开发世界

Django是用Python编写,因此其减少了太多中间层代码并突出提高了效率。Django可以支持云平台,使其成为Web开发中更受欢迎选择。...Django基于“自备军需”理念,您不必使用单独库来实现常见功能,例如身份验证,URL路由,模板系统, 对象关系映射器(ORM)和数据库模型迁移。...您也可以使用其他框架创建可读 URL,但没有一个 Django 一样容易进行 URL 构造。...在数据库中自动创建 如果你数据库中缺失了某一个,你可以通过执行 Django 迁移命令来自动创建它。 容易数据迁移 数据迁移是 Django 中最有用功能之一。...Django有一个非常活跃社区,有80,000个StackOverflow问题和数不清博客来自开发人员和高级用户。

1.1K30

为什么 Django 能持续统治 Python 开发世界

Django主要特点 Django“自备军需”(Batteries-Included) Django基于“自备军需”理念,您不必使用单独库来实现常见功能,例如身份验证,URL路由,模板系统,对象关系映射器...代码设计 大多数 Web 框架相反,Django 通过使用称为 app 东西,更容易地将新功能添加到产品中。 因此,开发者可以感受到 Django 鼓励大家编写模块化代码。...您也可以使用其他框架创建可读 URL,但没有一个 Django 一样容易进行 URL 构造。...在数据库中自动创建 如果你数据库中缺失了某一个,你可以通过执行 Django 迁移命令来自动创建它。 容易数据迁移 数据迁移是 Django 中最有用功能之一。...Django有一个非常活跃社区,有80,000个StackOverflow问题和数不清博客来自开发人员和高级用户。

1.1K30

一个开源用Python3写考试系统

这个应用程序基于PythonDjango Web框架开发,并可在任何标准Web服务器上运行。...功能特点 管理员可添加/编辑/删除考试和问题 用户可以注册并参加考试 考试可以包含多个问题,并包括单选、多选和填空题 管理员可以查看考试结果和统计信息 使用步骤 1.安装Python和Django Web...python manage.py createsuperuser python manage.py runserver 4.在Web浏览器中导航到 http://localhost:8000/admin/ 并使用创建管理员凭据登录...5.创建新考试并添加问题 6.在Web浏览器中导航到 http://localhost:8000/ 并注册一个新用户 7.登录并参加考试 结论 Python Django Online Exam是一个功能齐全在线考试应用程序...它是开源,易于安装和使用,并具有优秀用户和管理员界面。需要安装Python和Django Web框架,但在安装完毕后,只需几个简单步骤即可运行该应用程序。

29530

Django-admin管理工具

admin组件使用 Django 提供了基于 web 管理工具。 Django 自动管理工具是 django.contrib 一部分。...django.contrib.messages', 'django.contrib.staticfiles', "app01" ] django.contrib是一套庞大功能集,它是Django...4. list_select_related,列表时,连查询是否自动select_related。 5. list_editable,列表时,可以编辑列 。...models.UserInfo) class UserAdmin(admin.ModelAdmin): date_hierarchy = 'ctime' 8  inlines,详细页面,如果有其他和当前做...如果在程序运行期间,有很多地方都需要使用配置文件内容,也就是说,很多地方都需要创建 AppConfig 对象实例,这就导致系统中存在多个 AppConfig 实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多情况下

2K20

Web | Django 数据库交互,你需要知道 9 个技巧

(作者好萌) 我们有一些晚上运行 ETL 进程,主要是在产品和用户上做维护。这些 ETL 操作会更新字段然后插入,这样它们也会获得了锁。 那么问题是什么?...当 select_for_update select_related 一起使用时,Django 将尝试获取查询中所有锁。 我们用来获取事务代码尝试获取事务、用户、产品、类别锁。...一旦 ETL 在午夜锁定了后三个,交易就开始失败。 一旦我们对问题有了更好理解,我们就开始寻找只锁定必要(事务方法。...典型例子是 M2M(多对多)关系直通模型: class Membership(Model): group = ForeignKey(Group) user = ForeignKey(...M2M 模型中另一个常见模式是在两个字段一起作为一个唯一约束。

2.8K40

django 1.8 官方文档翻译: 2-1-1 模型语法(初稿)

关系 显然,关系数据库威力体现在之间相互关联。Django 提供了三种最常见数据库关系:多对一(many-to-one),多对多(many-to-many),一对一(one-to-one)。...多对一关系 Django 使用 ForeignKey 定义多对一关系。 和使用其他 字段(Field) 类型一样:在 model 当中把它做为一个类属性包含进来。...字段,这个字段指向 Place (因为饭店(restaurant)本身就是一个地点(place),事实上,在处理这个问题时候,你已经使用了一个典型 继承(inheritance),它隐含了一个一对一关系...通常情况下,对数据库视图创建 model 或是数据不需要由 Django 控制时,就使用这个选项。...所以 Django 继承机制被设计成 Python 有所不同,这样做并不是随意而为

3.1K30

Django】 开发:静态文件,应用和模型层

模型是数据交互接口,是表示和操作数据库方法和方式 Django ORM框架 ORM(Object Relational Mapping)即对象关系映射,它是一种程序技术,它允许你使用类和对象对数据库进行操作...,从而避免通过SQL语句操作数据库 ORM框架作用 建立模型类和之间对应关系,允许我们通过面向对象方式来操作数据库。...不用编写各种数据库sql语句. 实现了数据模型数据库解耦, 屏蔽了不同数据库操作上差异. 不在关注用是mysql、oracle…等数据库内部细节....迁移是 Django 同步您对模型所做更改(添加字段,删除模型等) 到您数据库模式方式 1.生成或更新迁移文件 ​ 将每个应用下 models.py 文件生成一个中间文件,并保存在 migrations....) # objects 是管理器对象 创建数据对象 Django 使用一种直观方式把数据库数据表示成Python 对象 创建数据中每一条记录就是创建一个数据对象 MyModel.objects.create

1.7K20

django 1.8 官方文档翻译:2-1-1 模型语法

Django 在必要时候会自动大写首字母。 关系 显然,关系数据库威力体现在之间相互关联。...你还可以创建递归关联关系(对象和自己进行多对一关联)和 尚未定义模型关联关系;详见模型字段参考。...toppings = models.ManyToManyField(Topping) 和使用ForeignKey 一样,你也可以创建递归关联关系(对象自己多对多关联)和尚未定义关系模型关联关系...使用中介模型定义自身多对多关系时,你必须设置 symmetrical=False(详见模型字段参考)。...字段,这个字段指向Place(因为Restaurant 本身就是一个Place;事实上,在处理这个问题时候,你应该使用一个典型 继承,它隐含一个一对一关系)。

4.9K20

Python自动化开发学习19-Djan

urls.py 里对应关系也要修改一下,中间写上类名,后面固定跟一个 .as_view() ,就是执行这个类as_view()方法,具体如下: from cmdb import views urlpatterns...ORM 连接sqlite数据库 默认使用是sqlite3作为数据库,使用数据库需要一下步骤 一、创建你数据库结构 app目录下models.py文件就是用来写你结构: from django.db...第二条命令是真正去操作数据库了,除了创建我们自己写以外,还创建了很多 django 自己。...row.id, row.username, row.password) return HttpResponse("show user") filter()里面还可以传入多个参数,就是多个条件,他们之间关系是逻辑...() # 但是我们在admin里看选择框时候看到是“管理员”、“普通用户”、“访客”,这就是因为把选项所对应内容放到了内存中了 # 有了Django这个功能就不用再搞一张,存放各个数值对应内容了

1.3K30

Django项目知识点(三)

null纯粹是数据库有关系。...模型关系 基本原则: 一对一,两属性实际上完全可以合并成一个,共用一个主键即可; 一对多,可以设中间关联,也可以将关联并入“多”这头;若设独立关联,则可引入“多”这头主键作为其主键...,也可另立主键并将“一”和“多”两主键作为关联外键; 多对多,则必须设中间关联,关联设独立主键,并引入两个“多”头主键作为关联外键。...文章和作者之间关系就是典型多对一关系。作者和文章关系就是一对多。 多对多:在某中创建一行数据是,有一个可以多选下拉框 不同学生有不同课程 再比如文章和标签关系。...在这里插入图片描述 如果没有学生,没有课程来报名上学干嘛,所以是多对一,多个学生合成一张报名表 注意:外键和一对一关系时候需要加on_delete选项,此参数为了避免两个表里数据不一致问题,不然会报错

1.8K30
领券