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

Django DateTimeField时间戳格式无效问题求助

问题分析与解决建议

环境信息

  • Django 4.0(虚拟环境)
  • Python 3.8
  • Postgres 15
  • Elementary OS 6.1

核心问题

你的MyModel在保存时,created/updated字段被传入了毫秒级时间戳(如1669827388000),导致Django的DateTime字段格式验证失败。哪怕使用auto_now_add/auto_now或自定义save方法,错误依然存在,主要有几个明显的问题点需要优先修复:


1. 视图里的变量名笔误(致命错误)

看你提供的视图代码:

@api_view(['GET'])
def dummy_view(request):
    new_record = MyModel(
        other_field=True
    )
    new_token.save()  # 这里写错了!

你创建的对象是new_record,但保存的是new_token——这个new_token大概率是其他地方的变量,可能带有时间戳格式的created/updated值,直接导致了验证错误。立刻改成new_record.save()。

2. 自定义save方法的父类调用错误

你修改后的模型里,save方法写了:

return super(Token, self).save(*args, **kwargs)

但你的模型类是MyModel,不是Token!这个错误会导致父类的save逻辑没有正确执行,甚至可能触发其他模型的逻辑,直接引发字段值异常。修复成:

return super(MyModel, self).save(*args, **kwargs)
# 或者Python3+直接写super().save(*args, **kwargs)

3. 排查是否有外部传入时间戳值

如果用了DRF的序列化器,检查是否把created/updated字段暴露给了前端,导致外部传入了时间戳。正确的做法是把这两个字段设为只读:

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ['other_field', 'created', 'updated']
        read_only_fields = ['created', 'updated']  # 禁止外部修改

4. 回到初始模型并确保迁移生效

如果自定义save方法容易出错,建议先回到最初的auto_now_add/auto_now配置,这是Django官方推荐的自动维护时间字段的方式:

class MyModel(models.Model):
    other_field = models.BooleanField()
    created = models.DateTimeField(auto_now_add=True)  # 创建时自动赋值
    updated = models.DateTimeField(auto_now=True)      # 每次保存自动更新

然后执行迁移,确保数据库字段的默认值配置正确:

python manage.py makemigrations
python manage.py migrate

5. 排查信号或中间件干扰

检查项目中是否有pre_save信号或者其他中间件,在保存前给created/updated字段赋值了时间戳。如果有,修改这些逻辑,确保传入的是datetime对象而非时间戳字符串/数字。


按以上步骤逐一排查修复,应该能解决时间戳格式验证的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:25:20