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

如何修改Django默认日期格式?配置后表单未生效求助

解决Django表单日期格式(日-月-年)不生效的问题

你在settings.py中设置DATE_INPUT_FORMATS=['%d.%m.%Y']后表单仍不生效,核心原因是ModelForm默认的日期字段不会自动继承全局日期格式配置,或是被本地化设置覆盖了。下面提供两种可行的解决办法:

方法一:在表单中显式指定日期字段格式

直接给表单里的date_of_birth字段配置输入和显示格式,确保前后端都遵循日.月.年的规则:

from django import forms
from .models import PersonalDetail

class PersonalDetailForm(ModelForm):
    date_of_birth = forms.DateField(
        input_formats=['%d.%m.%Y'],
        # 配置前端输入框的提示和显示格式
        widget=forms.DateInput(
            attrs={'placeholder': 'DD.MM.YYYY'},
            format='%d.%m.%Y'
        )
    )
    
    class Meta:
        model = PersonalDetail
        fields = '__all__'

修改后,前端输入框会显示格式提示,后端也会优先用%d.%m.%Y规则验证输入的日期。

方法二:全局配置生效(适配所有日期字段)

如果希望所有表单的日期字段都默认使用日.月.年格式,调整settings.py的配置,避免本地化设置覆盖自定义规则:

# settings.py
USE_L10N = False  # 关闭自动本地化,防止覆盖自定义日期格式
DATE_INPUT_FORMATS = ['%d.%m.%Y']  # 日期解析格式
DATE_FORMAT = 'd.m.Y'  # 日期显示格式

如果需要保留本地化功能,也可以指定对应语言的格式,比如英式英语(默认日期格式为日-月-年):

# settings.py
LANGUAGE_CODE = 'en-GB'
USE_L10N = True
DATE_INPUT_FORMATS = ['%d.%m.%Y'] + django.conf.settings.DATE_INPUT_FORMATS  # 追加自定义格式到本地化列表

验证修改

修改完成后重启Django服务,刷新页面测试:

  • 输入15.03.2024这类符合DD.MM.YYYY格式的日期,表单应能正常验证并保存
  • 若用全局配置方案,所有日期字段都会自动应用该格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:10:19