From b43e2b51ad35ebe0022c4f6aa23f6d85ea5e2e0f Mon Sep 17 00:00:00 2001 From: ddrwode <34234@3来 34> Date: Fri, 6 Mar 2026 13:29:10 +0800 Subject: [PATCH] haha --- server/api/tasks.py | 18 +++++++++++------- server/serializers.py | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/server/api/tasks.py b/server/api/tasks.py index 0a504c8..e67573f 100644 --- a/server/api/tasks.py +++ b/server/api/tasks.py @@ -200,13 +200,6 @@ def task_list(request): # POST: 提交新任务 data = request.data.copy() - # form-data 中 params 可能是 JSON 字符串 - params_raw = data.get("params", {}) - if isinstance(params_raw, str): - try: - data["params"] = json.loads(params_raw) if params_raw.strip() else {} - except (json.JSONDecodeError, ValueError): - data["params"] = {} ser = TaskCreateSerializer(data=data) if not ser.is_valid(): @@ -215,6 +208,17 @@ def task_list(request): raise ValidationError(ser.errors) validated = ser.validated_data.copy() + + # form-data 中 params 是 JSON 字符串,需要手动解析 + params_raw = validated.get("params", "") + if isinstance(params_raw, str): + try: + validated["params"] = json.loads(params_raw) if params_raw.strip() else {} + except (json.JSONDecodeError, ValueError): + validated["params"] = {} + elif not isinstance(params_raw, dict): + validated["params"] = {} + # boss_id 即 /api/accounts 返回的 id(账号主键),与 id/account_id 等价,均按主键查表 account_id = ( validated.pop("id", None) diff --git a/server/serializers.py b/server/serializers.py index 7a29c5a..da9dd56 100644 --- a/server/serializers.py +++ b/server/serializers.py @@ -45,7 +45,7 @@ class TaskCreateSerializer(serializers.Serializer): boss_id = serializers.CharField(max_length=64, required=False, allow_blank=True, default="") # 即 /api/accounts 返回的 id(账号主键) worker_id = serializers.CharField(max_length=64, required=False, allow_blank=True, default="") account_name = serializers.CharField(max_length=128, required=False, allow_blank=True, default="") - params = serializers.JSONField(required=False, default=dict) + params = serializers.CharField(required=False, allow_blank=True, default="") class TaskOutSerializer(serializers.Serializer):