From cf5c3c5d2fe794c818c00e25fb8acd82eac5dce1 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Tue, 4 Aug 2026 09:56:16 -0600 Subject: [PATCH] =?UTF-8?q?fix(achievement):=20=E7=AE=A1=E7=90=86=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=BA=8F=E5=88=97=E5=8C=96=20create=5Ftime=20?= =?UTF-8?q?=E4=B8=BA=E5=AD=97=E7=AC=A6=E4=B8=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _serialize 是手写 dict 而非 DRF 序列化器,原始 datetime 交给 JSON 编码器抛 TypeError,导致整个管理接口 500。 表为空时列表接口看着正常(不进循环),一旦有数据就全挂—— 生产环境表现为:新建成就实际写库成功,但返回响应时炸掉, 前端弹窗不关、列表刷不出来,看起来像保存失败,于是重复点击建出多条。 Co-Authored-By: Claude Opus 5 --- achievement/views/admin.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/achievement/views/admin.py b/achievement/views/admin.py index 2f3f994..dbc4b6d 100644 --- a/achievement/views/admin.py +++ b/achievement/views/admin.py @@ -119,5 +119,8 @@ def _serialize(a): # 这个计数器是唯一的仪表盘 "unlock_count": a.unlock_count, "order": a.order, - "create_time": a.create_time, + # 必须 isoformat():这里是手写的 dict 而不是 DRF 序列化器, + # 原始 datetime 交给 JSON 编码器会抛 TypeError,整个管理接口 500。 + # 表为空时列表接口看着正常(不进循环),一旦有数据就全挂。 + "create_time": a.create_time.isoformat() if a.create_time else None, }