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>
This commit is contained in:
fit2bot
2026-06-25 17:00:03 +08:00
committed by GitHub
parent 22caa47c99
commit dc98c2c436
3 changed files with 22 additions and 3 deletions

View File

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

View File

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

View File

@@ -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. """