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

Django DRF注册创建用户成功但报Invalid format string 500错误

故障定位结论

这个问题和注册写入逻辑、路由、权限/认证类配置完全无关——你已经观察到新用户可以成功创建,说明入参校验、RegisterSerializer的create方法都正常执行完毕,错误发生在构造接口返回值的阶段,也就是你在post方法里调用UserSerializer序列化待返回用户数据时触发的。

错误触发点在DRFDateTimeField的to_representation方法,根因非常明确:你使用的UserSerializer(包括其嵌套的Profile序列化逻辑)中,某一个DateTimeField字段配置的format参数不符合Python日期格式化规则,调用strftime时抛出Invalid format string异常。

常见错误场景
  • 混淆了不同语言的日期格式语法:把Java的yyyy-MM-dd、JS的YYYY-MM-DD HH:mm:ss这类非Python标准的格式串直接配置给了DRF的DateTimeField
  • 全局REST_FRAMEWORK配置中DATETIME_FORMAT、DATE_FORMAT、TIME_FORMAT参数值写错
  • User/Profile模型上的date_joined、last_login、created_at、updated_at这类datetime类型字段,在UserSerializer中手动指定了错误的format参数
修复步骤
  1. 精准定位出错字段:直接在报错的rest_framework/fields.py第1242行打断点,查看当前实例的field_name(出错字段名)和format(错误的格式串)属性,10秒就能定位到问题字段
  2. 修正格式串为Python strftime标准写法:
    • 4位年用%Y,不要写YYYY/yyyy
    • 补零两位月用%m,不要写MM
    • 补零两位日用%d,不要写DD/dd
    • 24小时制小时用%H,分钟用%M,秒用%S
      例:错误写法format="YYYY-MM-DD HH:MM:SS",正确写法format="%Y-%m-%d %H:%M:%S"
  3. 重新发起注册请求即可正常返回200响应,不会再触发500错误

排查提示:不需要反复检查RegisterSerializer的逻辑,它只负责入参处理和数据写入,这部分已经跑通了,问题只出在返回用的序列化器配置上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:12:19