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参数
修复步骤
- 精准定位出错字段:直接在报错的
rest_framework/fields.py第1242行打断点,查看当前实例的field_name(出错字段名)和format(错误的格式串)属性,10秒就能定位到问题字段 - 修正格式串为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"
- 4位年用
- 重新发起注册请求即可正常返回200响应,不会再触发500错误
排查提示:不需要反复检查
RegisterSerializer的逻辑,它只负责入参处理和数据写入,这部分已经跑通了,问题只出在返回用的序列化器配置上。
内容的提问来源于stack exchange,提问作者Emm
相关产品推荐
相关产品推荐

