From dc98c2c43609f8e75b97789681f240cd9b1766c3 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Thu, 25 Jun 2026 17:00:03 +0800 Subject: [PATCH] fix: Platform error translate (#16947) * fix: Import prompts a interal error when the label is too long * fix: Platform error translate --------- Co-authored-by: wangruidong <940853815@qq.com> --- apps/assets/serializers/asset/common.py | 5 +++-- apps/common/serializers/fields.py | 9 ++++++++- apps/labels/serializers.py | 11 +++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/apps/assets/serializers/asset/common.py b/apps/assets/serializers/asset/common.py index 0955cb8ff..0ba55cd8b 100644 --- a/apps/assets/serializers/asset/common.py +++ b/apps/assets/serializers/asset/common.py @@ -15,6 +15,7 @@ from common.serializers import ( ) from common.serializers.common import DictSerializer from common.serializers.fields import LabeledChoiceField, ObjectRelatedField +from django.utils.translation import gettext from labels.models import Label from orgs.mixins.serializers import BulkOrgResourceModelSerializer from ...const import Category, AllTypes @@ -266,10 +267,10 @@ class AssetSerializer(BulkOrgResourceModelSerializer, ResourceLabelsMixin, Writa try: platform = self.fields['platform'].to_internal_value(platform_data) except serializers.ValidationError as exc: - raise serializers.ValidationError({'platform': exc.detail}) + raise serializers.ValidationError({gettext('Platform'): exc.detail}) if not platform: - raise serializers.ValidationError({'platform': _("Platform not exist")}) + raise serializers.ValidationError({gettext('Platform'): _("Platform not exist")}) return platform def validate_zone(self, value): diff --git a/apps/common/serializers/fields.py b/apps/common/serializers/fields.py index 521e34c16..67135bb3a 100644 --- a/apps/common/serializers/fields.py +++ b/apps/common/serializers/fields.py @@ -137,7 +137,14 @@ class LabelRelatedField(serializers.RelatedField): k, v = [x.strip() for x in data.split(":", 1)] else: raise serializers.ValidationError(_("Invalid data type")) - label, __ = Label.objects.get_or_create(name=k, value=v, defaults={'name': k, 'value': v}) + from labels.serializers import LabelSerializer + + validated = LabelSerializer.validate_name_value(k, v) + label, __ = Label.objects.get_or_create( + name=validated['name'], + value=validated['value'], + defaults=validated, + ) return LabeledResource(label=label) diff --git a/apps/labels/serializers.py b/apps/labels/serializers.py index 8fcfa83a0..9fa59b2d8 100644 --- a/apps/labels/serializers.py +++ b/apps/labels/serializers.py @@ -3,6 +3,7 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from common.serializers.fields import ObjectRelatedField, LabeledChoiceField +from common.validators import ProjectUniqueValidator from orgs.mixins.serializers import BulkOrgResourceModelSerializer from .const import label_resource_types from .models import Label, LabeledResource @@ -31,6 +32,16 @@ class LabelSerializer(BulkOrgResourceModelSerializer): def validate_value(self, value): return self.validate_name(value) + @classmethod + def validate_name_value(cls, name, value): + serializer = cls(data={'name': name, 'value': value}) + serializer.validators = [ + v for v in serializer.validators + if not isinstance(v, (serializers.UniqueTogetherValidator, ProjectUniqueValidator)) + ] + serializer.is_valid(raise_exception=True) + return serializer.validated_data + @classmethod def setup_eager_loading(cls, queryset): """ Perform necessary eager loading of data. """