perf: 优化 api doc 报错

pull/10280/head
ibuler 2023-04-20 15:23:00 +08:00 committed by Jiangjie.Bai
parent 75724cbddb
commit dac708f952
3 changed files with 20 additions and 5 deletions

View File

@ -13,6 +13,7 @@ from common.serializers import (
WritableNestedModelSerializer, SecretReadableMixin,
CommonModelSerializer, MethodSerializer
)
from common.serializers.common import DictSerializer
from common.serializers.fields import LabeledChoiceField
from orgs.mixins.serializers import BulkOrgResourceModelSerializer
from ...const import Category, AllTypes
@ -326,19 +327,19 @@ class DetailMixin(serializers.Serializer):
category = request.query_params.get('category')
else:
instance = self.get_instance()
category = instance.category
category = instance.category if instance else 'host'
return category
def get_gathered_info_serializer(self):
category = self.get_category()
from .info.gathered import category_gathered_serializer_map
serializer_cls = category_gathered_serializer_map.get(category, serializers.DictField)
serializer_cls = category_gathered_serializer_map.get(category, DictSerializer)
return serializer_cls()
def get_spec_info_serializer(self):
category = self.get_category()
from .info.spec import category_spec_serializer_map
serializer_cls = category_spec_serializer_map.get(category, serializers.DictField)
serializer_cls = category_spec_serializer_map.get(category, DictSerializer)
return serializer_cls()

View File

@ -1,10 +1,10 @@
from django.db.models import QuerySet
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from assets.models import Custom, Platform, Asset
from common.const import UUID_PATTERN
from common.serializers import MethodSerializer, create_serializer_class
from common.serializers.common import DictSerializer
from .common import AssetSerializer
__all__ = ['CustomSerializer']
@ -19,7 +19,7 @@ class CustomSerializer(AssetSerializer):
def get_custom_info_serializer(self):
request = self.context.get('request')
default_field = serializers.DictField(required=False, label=_('Custom info'))
default_field = DictSerializer()
if not request:
return default_field

View File

@ -96,3 +96,17 @@ class WritableNestedModelSerializer(NestedModelSerializer):
class FileSerializer(serializers.Serializer):
file = serializers.FileField(label=_("File"))
class DictSerializer(serializers.Serializer):
def to_representation(self, instance):
# 返回一个包含所有提交字段的 Python 字典
return instance
def to_internal_value(self, data):
# 确保从请求中得到的输入是 Python 字典
if isinstance(data, dict):
return data
else:
raise serializers.ValidationError("无法转换为dict类型")