From 1ca0bdf8430d38a407b2a7f3600d9792a0ac0b11 Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 9 Aug 2022 16:53:43 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BF=AE=E6=94=B9=20category?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/asset/category.py | 1 - apps/assets/serializers/asset/common.py | 36 +++++++++++------------ apps/common/drf/fields.py | 20 ++++++++++++- apps/common/drf/serializers.py | 13 ++++---- 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/apps/assets/serializers/asset/category.py b/apps/assets/serializers/asset/category.py index 0b01bb0a2..32d954652 100644 --- a/apps/assets/serializers/asset/category.py +++ b/apps/assets/serializers/asset/category.py @@ -1,5 +1,4 @@ from rest_framework import serializers -from django.utils.translation import gettext_lazy as _ from .common import AssetSerializer from assets.models import DeviceInfo, Host, Database diff --git a/apps/assets/serializers/asset/common.py b/apps/assets/serializers/asset/common.py index 16cc25264..e25946dc0 100644 --- a/apps/assets/serializers/asset/common.py +++ b/apps/assets/serializers/asset/common.py @@ -4,10 +4,8 @@ from rest_framework import serializers from django.utils.translation import ugettext_lazy as _ from common.drf.serializers import JMSWritableNestedModelSerializer -from orgs.mixins.serializers import OrgResourceModelSerializerMixin -from ...models import Asset, Node, Platform, Protocol, Label, Domain, Account -from ..mixin import CategoryDisplayMixin from ..account import AccountSerializer +from ...models import Asset, Node, Platform, Protocol, Label, Domain, Account __all__ = [ 'AssetSerializer', 'AssetSimpleSerializer', 'MiniAssetSerializer', @@ -18,14 +16,15 @@ __all__ = [ class AssetProtocolsSerializer(serializers.ModelSerializer): class Meta: model = Protocol - fields = ['pk', 'name', 'port'] + fields = ['id', 'name', 'port'] class AssetLabelSerializer(serializers.ModelSerializer): class Meta: model = Label - fields = ['pk', 'name', 'value'] + fields = ['id', 'name', 'value'] extra_kwargs = { + 'name': {'required': False}, 'value': {'required': False} } @@ -33,7 +32,7 @@ class AssetLabelSerializer(serializers.ModelSerializer): class AssetPlatformSerializer(serializers.ModelSerializer): class Meta: model = Platform - fields = ['pk', 'name'] + fields = ['id', 'name'] extra_kwargs = { 'name': {'required': False} } @@ -42,35 +41,34 @@ class AssetPlatformSerializer(serializers.ModelSerializer): class AssetDomainSerializer(serializers.ModelSerializer): class Meta: model = Domain - fields = ['pk', 'name'] + fields = ['id', 'name'] + extra_kwargs = { + 'name': {'required': False} + } class AssetNodesSerializer(serializers.ModelSerializer): class Meta: model = Node - fields = ['pk', 'value'] + fields = ['id', 'value'] extra_kwargs = { 'value': {'required': False} } -class AssetSerializer(CategoryDisplayMixin, - JMSWritableNestedModelSerializer, - OrgResourceModelSerializerMixin): +class AssetSerializer(JMSWritableNestedModelSerializer): + # category = ChoiceDisplayField(choices=Category.choices, required=False) + # type = ChoiceDisplayField(choices=AllTypes.choices, required=False) domain = AssetDomainSerializer(required=False) - nodes_display = serializers.ListField( - child=serializers.CharField(), label=_('Nodes name'), required=False, - ) + platform = AssetPlatformSerializer(required=False) labels = AssetLabelSerializer(many=True, required=False) nodes = AssetNodesSerializer(many=True, required=False) - platform = AssetPlatformSerializer(required=False) accounts = AccountSerializer(many=True, required=False) - protocols = AssetProtocolsSerializer(many=True) + protocols = AssetProtocolsSerializer(many=True, required=False) """ 资产的数据结构 """ - class Meta: model = Asset fields_mini = [ @@ -87,8 +85,8 @@ class AssetSerializer(CategoryDisplayMixin, 'nodes_display', ] read_only_fields = [ - 'category', 'category_display', 'type', 'type_display', - 'connectivity', 'date_verified', 'created_by', 'date_created', + 'category', 'type', 'connectivity', 'date_verified', + 'created_by', 'date_created', ] fields = fields_small + fields_fk + fields_m2m + read_only_fields extra_kwargs = { diff --git a/apps/common/drf/fields.py b/apps/common/drf/fields.py index f97925f43..c0c214c4f 100644 --- a/apps/common/drf/fields.py +++ b/apps/common/drf/fields.py @@ -1,12 +1,14 @@ # -*- coding: utf-8 -*- # +import six +from rest_framework.fields import ChoiceField from rest_framework import serializers from common.utils import decrypt_password __all__ = [ - 'ReadableHiddenField', 'EncryptedField' + 'ReadableHiddenField', 'EncryptedField', 'ChoiceDisplayField' ] @@ -36,3 +38,19 @@ class EncryptedField(serializers.CharField): def to_internal_value(self, value): value = super().to_internal_value(value) return decrypt_password(value) + + +class ChoiceDisplayField(ChoiceField): + def __init__(self, *args, **kwargs): + super(ChoiceDisplayField, self).__init__(*args, **kwargs) + self.choice_mapper = { + six.text_type(key): value for key, value in self.choices.items() + } + + def to_representation(self, value): + if value in ('', None): + return value + return { + 'name': value, + 'label': self.choice_mapper.get(six.text_type(value), value), + } diff --git a/apps/common/drf/serializers.py b/apps/common/drf/serializers.py index ece410d19..627ef728c 100644 --- a/apps/common/drf/serializers.py +++ b/apps/common/drf/serializers.py @@ -114,9 +114,10 @@ class SecretReadableMixin(serializers.Serializer): class JMSWritableNestedModelSerializer(WritableNestedModelSerializer): - - def _get_related_pk(self, data, model_class): - pk = data.get('pk') or data.get('id') or data.get(model_class._meta.pk.attname) - if pk: - return str(pk) - return None + pass + # + # def _get_related_pk(self, data, model_class): + # pk = data.get('pk') or data.get('id') or data.get(model_class._meta.pk.attname) + # if pk: + # return str(pk) + # return None