如何调整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
相关产品推荐
相关产品推荐

