From 9e3e183f954b75d6f8bcdd199916075211021a04 Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 16 Jun 2023 15:07:17 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=20platform=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/serializers/dynamic.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/common/serializers/dynamic.py b/apps/common/serializers/dynamic.py index cac9ae0dc..49e1e062d 100644 --- a/apps/common/serializers/dynamic.py +++ b/apps/common/serializers/dynamic.py @@ -44,19 +44,21 @@ def set_default_by_type(tp, data, field_info): def create_serializer_class(serializer_name, fields_info): serializer_fields = {} - fields_name = ['name', 'label', 'default', 'type', 'help_text'] + fields_name = ['name', 'label', 'default', 'required', 'type', 'help_text'] for i, field_info in enumerate(fields_info): data = {k: field_info.get(k) for k in fields_name} field_type = data.pop('type', 'str') - if data.get('default') is None: + # 用户定义 default 和 required 可能会冲突, 所以要处理一下 + default = data.get('default', '') + if default not in ['', None]: + data['required'] = False + else: data.pop('default', None) - data['required'] = field_info.get('required', True) + data['required'] = True data = set_default_by_type(field_type, data, field_info) data = set_default_if_need(data, i) - if data.get('default', None) is not None: - data['required'] = False field_name = data.pop('name') field_class = type_field_map.get(field_type, serializers.CharField) serializer_fields[field_name] = field_class(**data)