diff --git a/apps/terminal/models/component/storage.py b/apps/terminal/models/component/storage.py index a3f8e4b54..dc064c0d0 100644 --- a/apps/terminal/models/component/storage.py +++ b/apps/terminal/models/component/storage.py @@ -77,6 +77,11 @@ class CommandStorage(CommonStorageModelMixin, JMSBaseModel): def config(self): config = self.meta config.update({'TYPE': self.type}) + # 处理 hosts 对象, 正常应该是list, 但是有时候是 str, debug 未果 + hosts = config.get('HOSTS', []) + if isinstance(hosts, str) and ',' in hosts: + hosts = hosts.split(',') + config['HOSTS'] = hosts return copy.deepcopy(config) @property diff --git a/apps/terminal/serializers/storage.py b/apps/terminal/serializers/storage.py index 8bc66fd5a..dd0f7f677 100644 --- a/apps/terminal/serializers/storage.py +++ b/apps/terminal/serializers/storage.py @@ -178,7 +178,6 @@ command_storage_type_serializer_classes_mapping = { # BaseStorageSerializer class BaseStorageSerializer(serializers.ModelSerializer): - type = LabeledChoiceField(choices=const.ReplayStorageType.choices, label=_('Type')) storage_type_serializer_classes_mapping = {} meta = MethodSerializer() @@ -222,6 +221,7 @@ class BaseStorageSerializer(serializers.ModelSerializer): # CommandStorageSerializer class CommandStorageSerializer(BaseStorageSerializer): + type = LabeledChoiceField(choices=const.CommandStorageType.choices, label=_('Type')) storage_type_serializer_classes_mapping = command_storage_type_serializer_classes_mapping class Meta(BaseStorageSerializer.Meta): @@ -233,6 +233,7 @@ class CommandStorageSerializer(BaseStorageSerializer): # ReplayStorageSerializer class ReplayStorageSerializer(BaseStorageSerializer): + type = LabeledChoiceField(choices=const.ReplayStorageType.choices, label=_('Type')) storage_type_serializer_classes_mapping = replay_storage_type_serializer_classes_mapping class Meta(BaseStorageSerializer.Meta):