如何在Django Admin面板中显示月份全称?
Django Admin 显示月份全称的解决方案
你需要在Django Admin面板中以04 December 2023的格式显示日期(包含月份全称),当前仅显示月份缩写或数字,问题出在代码中的字段名错误,以下是修复方案:
问题定位
你的admin.py中自定义的due_date方法里,引用了obj.date,但你的Todo模型中实际的日期字段是due_date,这个错误导致Django无法正确渲染自定义格式, fallback到了默认的日期显示样式。
修复步骤
1. 修正字段引用错误
修改admin.py中的自定义方法,将obj.date改为obj.due_date,同时建议重命名方法避免和模型字段名冲突,避免混淆:
@admin.register(Todo) class TodoAdmin(admin.ModelAdmin): list_display = ("id", "title", "formatted_due_date",) list_display_links = ("title",) def formatted_due_date(self, obj): # 使用strftime格式化日期,%B对应月份全称 return obj.due_date.strftime("%d %B %Y") # 设置表头显示的名称,和原字段名保持一致 formatted_due_date.short_description = "Due Date"
2. (可选)使用Django原生日期格式化工具
如果你希望日期格式支持国际化适配,推荐使用Django的DateFormat模块,替代Python原生的strftime:
from django.utils.dateformat import DateFormat @admin.register(Todo) class TodoAdmin(admin.ModelAdmin): list_display = ("id", "title", "formatted_due_date",) list_display_links = ("title",) def formatted_due_date(self, obj): df = DateFormat(obj.due_date) # d代表两位日期,F代表月份全称,Y代表四位年份 return df.format("d F Y") formatted_due_date.short_description = "Due Date"
验证配置
你的settings.py已经正确开启了国际化支持:
USE_I18N = TrueLANGUAGE_CODE = 'en-gb'
这确保了月份全称会按照英式英语显示(如December、April),无需额外调整。
内容的提问来源于stack exchange,提问作者flyingduck92
相关产品推荐
相关产品推荐

