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

如何将Django Admin中User权限布局复用至其他多对多字段模型?

当然可以实现!

Django Admin里User对象的权限选择布局(就是那个左右分栏、支持批量选择的界面)其实是靠几个内置组件实现的,你完全可以把这套布局复刻到自己的模型Admin中,步骤很清晰:

核心原理:用filter_horizontal/filter_vertical渲染多对多字段

UserAdmin里的权限/组选择界面,本质是用了Django Admin提供的filter_horizontal属性(想要垂直布局就用filter_vertical),它会自动把多对多字段渲染成左右双栏的选择器——左边是未选选项,右边是已选选项,支持批量添加/移除,和你看到的User权限界面完全一致。

具体实现步骤

假设你的目标模型是MyModel,它和另一模型RelatedModel有多对多关联(比如字段名为related_items),下面是具体代码:

1. 导入必要模块

from django.contrib import admin
from .models import MyModel, RelatedModel

2. 自定义Admin类,复刻UserAdmin的布局结构

class MyModelAdmin(admin.ModelAdmin):
    # 复刻UserAdmin的字段分组结构,按需调整字段
    fieldsets = (
        # 第一组:模型的基础信息字段
        ('基础信息', {
            'fields': ('name', 'description')  # 替换成你的模型实际字段
        }),
        # 第二组:多对多关联字段,做成折叠面板(可选)
        ('关联选项', {
            'fields': ('related_items',),  # 这里填你的多对多字段名
            'classes': ('collapse',),  # 加上这个可以让面板默认折叠,和UserAdmin的权限面板一致
        }),
    )
    
    # 关键!启用双栏选择器
    filter_horizontal = ('related_items',)

# 注册模型和对应的Admin类
admin.site.register(MyModel, MyModelAdmin)

进阶:复刻权限分组逻辑(如果需要)

如果你的关联模型(比如自定义的权限模型)需要像Django自带的Permission那样按分类显示(比如按所属APP分组),可以做以下调整:

  • 确保关联模型有分组字段(比如category)
  • 在关联模型的Admin类中设置list_filter,或者自定义表单的ModelChoiceField来实现分组渲染
  • 参考Django自带Permission模型的__str__方法,让选项显示更清晰(比如包含分组信息)

效果验证

启动Django服务后,进入MyModel的Admin编辑页面,你会看到related_items字段的布局和UserAdmin里的权限选择完全一致——左右双栏,支持批量选择、搜索筛选,体验和原生User权限界面一模一样。

内容的提问来源于stack exchange,提问作者Ivo Van de Grift

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:00:14