diff --git a/apps/accounts/serializers/account/account.py b/apps/accounts/serializers/account/account.py index 9ebbeda51..0a3bd7131 100644 --- a/apps/accounts/serializers/account/account.py +++ b/apps/accounts/serializers/account/account.py @@ -34,6 +34,7 @@ class AccountCreateUpdateSerializerMixin(serializers.Serializer): choices=AccountInvalidPolicy.choices, default=AccountInvalidPolicy.ERROR, write_only=True, label=_('Exist policy') ) + _template = None class Meta: fields = ['template', 'push_now', 'params', 'on_invalid'] @@ -69,9 +70,8 @@ class AccountCreateUpdateSerializerMixin(serializers.Serializer): name = name + '_' + uuid.uuid4().hex[:4] initial_data['name'] = name - @staticmethod - def from_template_if_need(initial_data): - template_id = initial_data.get('template') + def from_template_if_need(self, initial_data): + template_id = initial_data.pop('template', None) if not template_id: return if isinstance(template_id, (str, uuid.UUID)): @@ -81,6 +81,7 @@ class AccountCreateUpdateSerializerMixin(serializers.Serializer): if not template: raise serializers.ValidationError({'template': 'Template not found'}) + self._template = template # Set initial data from template ignore_fields = ['id', 'date_created', 'date_updated', 'org_id'] field_names = [ @@ -137,20 +138,17 @@ class AccountCreateUpdateSerializerMixin(serializers.Serializer): else: raise serializers.ValidationError('Account already exists') - def validate(self, attrs): - attrs = super().validate(attrs) - if self.instance: - return attrs - - template = attrs.pop('template', None) - if template: - attrs['source'] = Source.TEMPLATE - attrs['source_id'] = str(template.id) - return attrs + def generate_source_data(self, validated_data): + template = self._template + if template is None: + return + validated_data['source'] = Source.TEMPLATE + validated_data['source_id'] = str(template.id) def create(self, validated_data): push_now = validated_data.pop('push_now', None) params = validated_data.pop('params', None) + self.generate_source_data(validated_data) instance, stat = self.do_create(validated_data) self.push_account_if_need(instance, push_now, params, stat) return instance @@ -368,6 +366,7 @@ class AssetAccountBulkSerializer( def create(self, validated_data): push_now = validated_data.pop('push_now', False) + self.generate_source_data(validated_data) results = self.perform_bulk_create(validated_data) self.push_accounts_if_need(results, push_now) for res in results: