fix: 修复账号克隆 500 (#10192)

Co-authored-by: feng <1304903146@qq.com>
pull/10193/head
fit2bot 2023-04-13 14:20:07 +08:00 committed by GitHub
parent 4c7c8f482d
commit 4654756966
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 5 deletions

View File

@ -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):

View File

@ -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 = [