diff --git a/apps/accounts/serializers/account/account.py b/apps/accounts/serializers/account/account.py index b2a982fd4..8bd903149 100644 --- a/apps/accounts/serializers/account/account.py +++ b/apps/accounts/serializers/account/account.py @@ -68,7 +68,7 @@ class AccountCreateUpdateSerializerMixin(serializers.Serializer): @staticmethod def from_template_if_need(initial_data): - template_id = initial_data.pop('template', None) + template_id = initial_data.get('template') if not template_id: return if isinstance(template_id, (str, uuid.UUID)): @@ -84,7 +84,7 @@ class AccountCreateUpdateSerializerMixin(serializers.Serializer): field.name for field in template._meta.fields if field.name not in ignore_fields ] - attrs = {'source': Source.TEMPLATE, 'source_id': str(template.id)} + attrs = {} for name in field_names: value = getattr(template, name, None) if value is None: @@ -139,9 +139,10 @@ class AccountCreateUpdateSerializerMixin(serializers.Serializer): if self.instance: return attrs - if 'source' in self.initial_data: - attrs['source'] = self.initial_data['source'] - attrs['source_id'] = self.initial_data['source_id'] + template = attrs.pop('template', None) + if template: + attrs['source'] = Source.TEMPLATE + attrs['source_id'] = str(template.id) return attrs def create(self, validated_data): diff --git a/apps/assets/serializers/asset/common.py b/apps/assets/serializers/asset/common.py index 12c127dae..45fa2ffab 100644 --- a/apps/assets/serializers/asset/common.py +++ b/apps/assets/serializers/asset/common.py @@ -67,6 +67,26 @@ class AssetPlatformSerializer(serializers.ModelSerializer): class AssetAccountSerializer(AccountSerializer): add_org_fields = False asset = serializers.PrimaryKeyRelatedField(queryset=Asset.objects, required=False, write_only=True) + clone_id: str + + def to_internal_value(self, data): + clone_id = data.pop('id', None) + ret = super().to_internal_value(data) + self.clone_id = clone_id + return ret + + def set_secret(self, attrs): + _id = self.clone_id + if not _id: + return attrs + + account = Account.objects.get(id=_id) + attrs['secret'] = account.secret + return attrs + + def validate(self, attrs): + attrs = super().validate(attrs) + return self.set_secret(attrs) class Meta(AccountSerializer.Meta): fields = [