admin/tasks:空分类/空截止转 NULL 防外键 500

task_categories 为空时前端传空字符串 category_id 违反 tasks_ibfk_1 外键约束,
create/update 统一将空分类与空截止转 None(列可空),不再 500
This commit is contained in:
Pine
2026-09-09 01:37:12 +08:00
parent 71adc35b53
commit 33a896a0f9
+12 -1
View File
@@ -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