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

如何调整Django Admin中@admin.display装饰的readonly_fields显示顺序?

解决Django Admin中自定义@admin.display字段的顺序问题

针对你遇到的自定义@admin.display装饰的字段无法通过常规fields或get_fields调整顺序的问题,有两种可靠的解决方式:

方式一:使用fieldsets精确控制布局(推荐)

通过fieldsets可以同时定义字段分组和顺序,将自定义方法字段与模型字段一起按需求排列,同时保持readonly_fields的配置:

class SomeModelAdmin(admin.ModelAdmin):
    @admin.display(description="User id")
    def get_user_id(self, obj):
        return obj.user.id

    list_display = (
        "get_user_id",
        "other_field1",
        "other_field2",
        "other_field3",
    )

    readonly_fields = (
        "get_user_id",
        "other_field1",
        "other_field2",
    )

    # 定义编辑页面的字段分组与顺序
    fieldsets = (
        (None, {
            'fields': (
                'get_user_id',  # 自定义字段放在首位
                'other_field1',
                'other_field2',
                'other_field3',
            )
        }),
    )

方式二:直接定义fields并包含自定义方法字段

如果不需要字段分组,直接在fields元组中加入自定义方法字段,即可强制指定所有字段的显示顺序:

class SomeModelAdmin(admin.ModelAdmin):
    @admin.display(description="User id")
    def get_user_id(self, obj):
        return obj.user.id

    list_display = (
        "get_user_id",
        "other_field1",
        "other_field2",
        "other_field3",
    )

    readonly_fields = (
        "get_user_id",
        "other_field1",
        "other_field2",
    )

    # 包含自定义方法字段的完整显示顺序
    fields = (
        "get_user_id",
        "other_field1",
        "other_field2",
        "other_field3",
    )

关键说明

之前尝试fields无效的原因是未将自定义方法字段加入fields元组:默认情况下fields仅包含模型的数据库字段,自定义的方法字段需要手动添加,才能让Django Admin按指定顺序渲染这些字段(包括只读的自定义字段)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:50:23