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

如何在Django Admin中修改DateField显示格式为DD-MM-YYYY

我来帮你搞定这个Django Admin日期格式的问题!你不想改动界面语言,只想把DateField的显示从YYYY-MM-DD改成DD-MM-YYYY,这几个方案都能完美解决你的需求:

方案1:在Admin列表页自定义日期显示(仅列表页生效)

如果只需要在Admin的列表视图里修改日期格式,可以给你的UserProfileAdmin类添加一个自定义方法,专门用来格式化DOB字段:

from django.contrib import admin
from .models import UserProfile
from django.utils.dateformat import DateFormat

class UserProfileAdmin(admin.ModelAdmin):
    # 把原来的DOB替换成自定义的formatted_dob
    list_display = ('user', 'mobile', 'alternative_number', 'formatted_dob')
    
    def formatted_dob(self, obj):
        # 用Django的DateFormat工具格式化日期
        df = DateFormat(obj.DOB)
        return df.format('d-m-Y')  # 指定DD-MM-YYYY格式
    
    # 设置这个自定义字段在表头显示的名称
    formatted_dob.short_description = 'Date of Birth'

admin.site.register(UserProfile, UserProfileAdmin)

方案2:全局配置日期格式(推荐,不改变界面语言)

这个方法最省心,既能让所有DateField都显示成你要的格式,又不会改动Admin的界面语言。只要在settings.py里添加日期格式的配置,覆盖默认的本地化设置即可:

# 保留你原来的设置
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

# 添加以下配置,指定日期显示和输入格式
DATE_FORMAT = 'd-m-Y'
DATE_INPUT_FORMATS = [
    '%d-%m-%Y',  # 支持用户用DD-MM-YYYY格式输入日期
    '%Y-%m-%d',  # 保留默认的YYYY-MM-DD输入格式,兼容已有数据和习惯
]

配置完成后,不管是Admin的列表页还是编辑页,所有日期字段都会自动显示为DD-MM-YYYY,界面语言依然是英文,完全符合你的需求!

方案3:针对单个字段自定义Widget(编辑页生效)

如果你只想修改UserProfile里的DOB字段,不想影响其他模型的日期格式,可以在Admin类里给该字段指定自定义的Widget:

from django.contrib import admin
from .models import UserProfile
from django.utils.dateformat import DateFormat
from django.forms.widgets import DateInput

class UserProfileAdmin(admin.ModelAdmin):
    def formfield_for_dbfield(self, db_field, **kwargs):
        if db_field.name == 'DOB':
            # 自定义日期输入控件的格式
            kwargs['widget'] = DateInput(attrs={'type': 'date', 'format': '%d-%m-%Y'})
        return super().formfield_for_dbfield(db_field, **kwargs)
    
    # 列表页搭配自定义显示方法
    list_display = ('user', 'mobile', 'alternative_number', 'formatted_dob')
    
    def formatted_dob(self, obj):
        df = DateFormat(obj.DOB)
        return df.format('d-m-Y')
    formatted_dob.short_description = 'Date of Birth'

admin.site.register(UserProfile, UserProfileAdmin)

注意:部分浏览器对原生date类型的输入控件可能会忽略format属性,这时候方案2的全局配置会更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:43:15