组创建页面权限显示优化:仅展示Codename,隐藏应用与模型名称
实现Django组权限选择框仅显示Codename(前端方案)

需求:在组创建页面选择权限时,移除app name和model name,仅显示最后一部分(即codename);展示权限时保留app name和content type,仅通过前端调整实现仅显示codename的效果。
解决方案
方法1:JavaScript动态修改选项文本
通过JS遍历权限下拉框的选项,提取并替换为codename,同时保留原始文本(可选),不影响后台数据提交。
- 编写自定义JS脚本(保存到
static/js/custom_permission_display.js):
document.addEventListener('DOMContentLoaded', function() { const permissionSelect = document.getElementById('id_permissions'); if (!permissionSelect) return; Array.from(permissionSelect.options).forEach(option => { // 适配Django默认权限文本格式:"应用名 | 模型名 | 权限codename" const textParts = option.text.split(' | '); if (textParts.length === 3) { // 存储原始文本到自定义属性,方便后续需要恢复展示 option.dataset.originalText = option.text; // 仅显示最后一段codename option.text = textParts[2]; } }); });
- 在Django Admin中引入该脚本:
修改admin.py,自定义Group的Admin类并添加媒体资源:
from django.contrib import admin from django.contrib.auth.models import Group class CustomGroupAdmin(admin.ModelAdmin): class Media: js = ('js/custom_permission_display.js',) # 替换默认的Group管理类 admin.site.unregister(Group) admin.site.register(Group, CustomGroupAdmin)
方法2:CSS截断显示(仅格式固定时推荐)
如果权限文本格式固定,可通过CSS仅显示最后部分,兼容性略差:
#id_permissions option { direction: rtl; white-space: nowrap; overflow: hidden; text-overflow: clip; max-width: 180px; }
将上述CSS添加到Admin的自定义样式文件中即可。
注意事项
- 仅修改前端显示,权限的实际提交值(权限ID)不受影响,不改变后台逻辑。
- 若Django Admin的权限文本格式变更,需对应调整JS的分割逻辑。
内容的提问来源于stack exchange,提问作者sanjog regmi
相关产品推荐
相关产品推荐

