diff --git a/apps/assets/serializers/asset/common.py b/apps/assets/serializers/asset/common.py index f95c3a4f8..e9fc80e4e 100644 --- a/apps/assets/serializers/asset/common.py +++ b/apps/assets/serializers/asset/common.py @@ -271,6 +271,8 @@ class AssetSerializer(BulkOrgResourceModelSerializer, WritableNestedModelSeriali @staticmethod def accounts_create(accounts_data, asset): + if not accounts_data: + return for data in accounts_data: data['asset'] = asset AssetAccountSerializer().create(data) diff --git a/apps/common/drf/parsers/excel.py b/apps/common/drf/parsers/excel.py index c5007866c..59a28af32 100644 --- a/apps/common/drf/parsers/excel.py +++ b/apps/common/drf/parsers/excel.py @@ -1,13 +1,16 @@ import pyexcel + from .base import BaseFileParser class ExcelFileParser(BaseFileParser): - media_type = 'text/xlsx' def generate_rows(self, stream_data): - workbook = pyexcel.get_book(file_type='xlsx', file_content=stream_data) + try: + workbook = pyexcel.get_book(file_type='xlsx', file_content=stream_data) + except Exception: + raise Exception('Invalid excel file') # 默认获取第一个工作表sheet sheet = workbook.sheet_by_index(0) rows = sheet.rows() diff --git a/apps/common/drf/renders/base.py b/apps/common/drf/renders/base.py index 038bd8a81..5b2aa5612 100644 --- a/apps/common/drf/renders/base.py +++ b/apps/common/drf/renders/base.py @@ -5,7 +5,7 @@ from rest_framework import serializers from rest_framework.renderers import BaseRenderer from rest_framework.utils import encoders, json -from common.serializers.fields import ObjectRelatedField +from common.serializers.fields import ObjectRelatedField, LabeledChoiceField from common.utils import get_logger logger = get_logger(__file__) @@ -100,7 +100,7 @@ class BaseFileRenderer(BaseRenderer): value = field.to_file_representation(value) elif isinstance(value, bool): value = 'Yes' if value else 'No' - elif isinstance(field, serializers.ChoiceField): + elif isinstance(field, LabeledChoiceField): value = value.get('value', '') elif isinstance(field, ObjectRelatedField): if field.many: diff --git a/apps/perms/serializers/permission.py b/apps/perms/serializers/permission.py index 96eccc9c2..3bf314f44 100644 --- a/apps/perms/serializers/permission.py +++ b/apps/perms/serializers/permission.py @@ -20,6 +20,12 @@ class ActionChoicesField(BitChoicesField): def __init__(self, **kwargs): super().__init__(choice_cls=ActionChoices, **kwargs) + def to_file_representation(self, value): + return [v['value'] for v in value] + + def to_file_internal_value(self, data): + return data + class AssetPermissionSerializer(BulkOrgResourceModelSerializer): users = ObjectRelatedField(queryset=User.objects, many=True, required=False, label=_('User'))