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

Django设置DD-MM-YYYY日期格式报错,寻求解决方案

问题解决:Django DateField日期格式错误

错误原因分析

你遇到的ValidationError本质是三个核心问题:

  1. 字段类型不匹配:DateField仅存储日期(无时间部分),但你给的default是带时分秒的字符串"23.07.2023 21:00:11",不符合字段要求。
  2. 默认值初始化错误:直接调用datetime.now().strftime(...)会在项目启动时就生成固定值,而非每次创建对象时获取当前时间。
  3. 格式概念混淆:Django的DateField存储的是date对象,不是格式化后的字符串——你混淆了「后端存储格式」和「前端显示/输入格式」。

解决方案

1. 正确设置默认当前日期(推荐)

如果只是需要创建对象时自动填充当前日期,直接用auto_now_add=True即可,Django会自动处理格式逻辑:

create_date = models.DateField(blank=False, auto_now_add=True)

或者用date.today作为默认值(延迟调用,每次创建对象时实时取当前日期):

from datetime import date

create_date = models.DateField(blank=False, default=date.today)

2. 实现DD-MM-YYYY的显示/输入格式

如果需要在前端表单输入或页面显示时用DD-MM-YYYY格式,需分别处理表单和模板:

表单输入处理(ModelForm)

在表单类中指定日期输入格式:

from django import forms
from .models import YourModel

class YourModelForm(forms.ModelForm):
    class Meta:
        model = YourModel
        fields = ['create_date']
        widgets = {
            'create_date': forms.DateInput(
                format=('%d-%m-%Y'),
                attrs={'type': 'date', 'placeholder': 'DD-MM-YYYY'}
            ),
        }
        input_formats = ['%d-%m-%Y']

模板显示处理

在模板中用date过滤器格式化输出:

{{ your_object.create_date|date:"d-m-Y" }}

关键提醒

  • DateField存储的是Python的date对象,不是字符串,不要直接给格式化后的字符串作为默认值。
  • 数据库中日期的存储格式由数据库自身决定,Django会自动处理转换,你只需关注前端的显示和输入格式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:44:59