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

Django Admin如何仅分组部分字段而无需指定全部字段?

解决Django Admin部分字段单独分组、其余字段自动包含的问题

你可以通过动态获取模型字段的方式实现需求,不用手动罗列所有字段,新增字段时也会自动加入默认分组:

方法一:使用get_fieldsets动态生成分组(推荐)

重写Admin类的get_fieldsets方法,动态过滤出除特殊字段外的所有字段,每次请求都会实时获取最新的模型字段配置:

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    # 指定要单独分组的字段
    _special_fields = ("field_11", "field_12")

    def get_fieldsets(self, request, obj=None):
        # 获取模型所有字段名,排除特殊字段
        default_fields = [
            field.name for field in MyModel._meta.fields 
            if field.name not in self._special_fields
        ]
        # 返回最终分组配置
        return (
            (None, {"fields": default_fields}),
            ("My special section", {"fields": self._special_fields}),
        )

这种方式的优势是实时生效,给模型新增字段后,无需重启服务或修改Admin配置,新字段会自动出现在默认分组中。

方法二:类加载时静态计算字段

如果你的模型字段不会频繁变动,也可以在Admin类定义时直接计算默认字段列表:

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    _special_fields = ("field_11", "field_12")
    # 静态计算默认字段列表
    _default_fields = [
        f.name for f in MyModel._meta.fields 
        if f.name not in _special_fields
    ]
    
    fieldsets = (
        (None, {"fields": _default_fields}),
        ("My special section", {"fields": _special_fields}),
    )

注意这种方式是在Admin类加载时计算字段列表,新增字段后需要重启服务才会生效,适合字段结构稳定的场景。

注意事项

  • 不要同时设置fields属性,否则会覆盖fieldsets的配置逻辑。
  • 如果有readonly_fields,默认情况下Django会自动将其加入字段列表;但如果手动指定了fields,需要显式将这些只读字段添加到对应分组中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:08:35