diff --git a/backend/app/schemas/task.py b/backend/app/schemas/task.py index d63627a..ea1231b 100644 --- a/backend/app/schemas/task.py +++ b/backend/app/schemas/task.py @@ -3,7 +3,7 @@ from __future__ import annotations import uuid from datetime import datetime from typing import Optional -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, field_validator # ============================================================ @@ -82,18 +82,19 @@ class TaskRecordResponse(BaseModel): model_config = {"from_attributes": True} + @field_validator("images", mode="before") @classmethod - def model_validate(cls, obj, **kwargs): - """处理 DB 中 images 的 JSON 字符串 → list 反序列化""" + def _parse_images(cls, v): + """处理 DB 中 images 的 JSON 字符串 → list 反序列化(不污染 ORM 对象)""" import json - if hasattr(obj, "images") and isinstance(obj.images, str): + if isinstance(v, str): try: - obj.images = json.loads(obj.images) + return json.loads(v) except (json.JSONDecodeError, TypeError): - obj.images = [] - elif hasattr(obj, "images") and obj.images is None: - obj.images = [] - return super().model_validate(obj, **kwargs) + return [] + if v is None: + return [] + return v # ============================================================