You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django HTML模板中排除指定默认用户权限?

如何在Django中排除默认权限,只展示项目相关权限

这问题我之前处理过,其实借助Django的Permission和ContentType模型的关联关系,就能轻松过滤掉那些默认的系统权限。下面给你几个实用的实现方案:

方案一:批量排除指定App的所有权限

Django的默认权限(比如groups、sessions、contenttypes相关)都属于特定的系统App,我们可以直接排除这些App对应的所有权限:

首先在views.py中修改权限查询逻辑:

from django.contrib.auth.models import Permission

# 定义需要排除的系统App列表,可根据需求调整
exclude_system_apps = ['auth', 'contenttypes', 'sessions', 'admin', 'messages']

# 过滤权限:排除指定App下的所有权限
permissions = Permission.objects.exclude(content_type__app_label__in=exclude_system_apps)

这样就能一次性去掉所有来自auth(包含groups、users权限)、contenttypes、sessions等系统App的权限,只保留你自己项目中自定义模型对应的权限。

方案二:精准排除特定模型的权限

如果你想更精细地控制(比如保留auth下的用户权限,但排除组权限),可以针对特定模型进行排除:

from django.contrib.auth.models import Permission

permissions = Permission.objects.exclude(
    # 先排除纯系统App的权限
    content_type__app_label__in=['contenttypes', 'sessions', 'admin', 'messages']
).exclude(
    # 单独排除auth下的group模型相关权限
    content_type__app_label='auth',
    content_type__model='group'
)

方案三:直接排除特定权限编码

如果你明确知道要排除的权限编码(codename),也可以直接通过codename过滤:

from django.contrib.auth.models import Permission

# 列出需要排除的权限编码
exclude_codenames = [
    'add_group', 'change_group', 'delete_group', 'view_group',
    'add_contenttype', 'change_contenttype', 'delete_contenttype', 'view_contenttype',
    'add_session', 'change_session', 'delete_session', 'view_session'
]

permissions = Permission.objects.exclude(codename__in=exclude_codenames)

模板部分无需修改

你的HTML模板循环逻辑保持不变即可:

{% for permission in permissions %}
    {{ permission.name }}
{% endfor %}

补充说明

Django的每个权限都会关联到一个ContentType对象,而ContentType是按**App标签(app_label)和模型名称(model)**来分类的,所以通过过滤content_type字段就能精准筛选出你需要的权限。你可以根据自己项目的实际情况,调整上述方案中的排除规则。

内容的提问来源于stack exchange,提问作者user4003969

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:27:10