From 33a896a0f9cecfaafab9d81ffe95b2f63331975a Mon Sep 17 00:00:00 2001 From: Pine Date: Wed, 9 Sep 2026 01:37:12 +0800 Subject: [PATCH] =?UTF-8?q?admin/tasks=EF=BC=9A=E7=A9=BA=E5=88=86=E7=B1=BB?= =?UTF-8?q?/=E7=A9=BA=E6=88=AA=E6=AD=A2=E8=BD=AC=20NULL=20=E9=98=B2?= =?UTF-8?q?=E5=A4=96=E9=94=AE=20500?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit task_categories 为空时前端传空字符串 category_id 违反 tasks_ibfk_1 外键约束, create/update 统一将空分类与空截止转 None(列可空),不再 500 --- app/api/routers/rbac_operator.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/api/routers/rbac_operator.py b/app/api/routers/rbac_operator.py index 005c176..197a8a4 100644 --- a/app/api/routers/rbac_operator.py +++ b/app/api/routers/rbac_operator.py @@ -321,6 +321,11 @@ async def create_task( ): fields = req.model_dump(exclude_none=True) fields["mode"] = _normalize_mode(fields.get("mode", "grab")) + # 空分类/空截止 → NULL:外键列可空,避免空字符串违反 tasks_ibfk_1 约束(500) + if not fields.get("category_id"): + fields["category_id"] = None + if not fields.get("deadline"): + fields["deadline"] = None if not fields.get("task_code"): fields["task_code"] = _gen_task_code() task = await db.tasks.create(fields) @@ -346,7 +351,13 @@ async def update_task( ): if await db.tasks.get(task_id) is None: raise HTTPException(status_code=404, detail="Task not found") - task = await db.tasks.update(task_id, req.model_dump(exclude_none=True)) + patch = req.model_dump(exclude_none=True) + # 空分类/空截止 → NULL(同 create 容错,避免外键 500) + if not patch.get("category_id"): + patch["category_id"] = None + if not patch.get("deadline"): + patch["deadline"] = None + task = await db.tasks.update(task_id, patch) await write_audit(db, action="task.update", resource="task", resource_id=task_id, detail=(req.title or ""), user=actor, request=request) return task