diff --git a/apps/assets/serializers/asset/common.py b/apps/assets/serializers/asset/common.py index 501d06780..96371bcd2 100644 --- a/apps/assets/serializers/asset/common.py +++ b/apps/assets/serializers/asset/common.py @@ -206,9 +206,12 @@ class AssetSerializer(BulkOrgResourceModelSerializer, ResourceLabelsMixin, Writa """ Perform necessary eager loading of data. """ queryset = queryset.prefetch_related('domain', 'nodes', 'protocols', ) \ .prefetch_related('platform', 'platform__automation') \ - .prefetch_related('labels', 'labels__label') \ .annotate(category=F("platform__category")) \ .annotate(type=F("platform__type")) + if queryset.model is Asset: + queryset = queryset.prefetch_related('labels__label', 'labels') + else: + queryset = queryset.prefetch_related('asset_ptr__labels__label', 'asset_ptr__labels') return queryset @staticmethod diff --git a/apps/common/drf/filters.py b/apps/common/drf/filters.py index d187cd414..d84692dfe 100644 --- a/apps/common/drf/filters.py +++ b/apps/common/drf/filters.py @@ -223,7 +223,7 @@ class LabelFilterBackend(filters.BaseFilterBackend): return queryset model = queryset.model.label_model() - labeled_resource_cls = model._labels.field.related_model + labeled_resource_cls = model.labels.field.related_model app_label = model._meta.app_label model_name = model._meta.model_name diff --git a/apps/common/serializers/mixin.py b/apps/common/serializers/mixin.py index d51849f07..16555a6ce 100644 --- a/apps/common/serializers/mixin.py +++ b/apps/common/serializers/mixin.py @@ -394,7 +394,7 @@ class CommonBulkModelSerializer(CommonBulkSerializerMixin, serializers.ModelSeri class ResourceLabelsMixin(serializers.Serializer): - labels = LabelRelatedField(many=True, label=_('Labels'), required=False, allow_null=True) + labels = LabelRelatedField(many=True, label=_('Labels'), required=False, allow_null=True, source='res_labels') def update(self, instance, validated_data): labels = validated_data.pop('labels', None) diff --git a/apps/labels/mixins.py b/apps/labels/mixins.py index 9feb6f0f0..4b775cde5 100644 --- a/apps/labels/mixins.py +++ b/apps/labels/mixins.py @@ -2,13 +2,14 @@ from django.contrib.contenttypes.fields import GenericRelation from django.db import models from django.db.models import OneToOneField +from common.utils import lazyproperty from .models import LabeledResource __all__ = ['LabeledMixin'] class LabeledMixin(models.Model): - _labels = GenericRelation(LabeledResource, object_id_field='res_id', content_type_field='res_type') + labels = GenericRelation(LabeledResource, object_id_field='res_id', content_type_field='res_type') class Meta: abstract = True @@ -21,7 +22,7 @@ class LabeledMixin(models.Model): model = pk_field.related_model return model - @property + @lazyproperty def real(self): pk_field = self._meta.pk if isinstance(pk_field, OneToOneField): @@ -29,9 +30,9 @@ class LabeledMixin(models.Model): return self @property - def labels(self): - return self.real._labels + def res_labels(self): + return self.real.labels - @labels.setter - def labels(self, value): - self.real._labels.set(value, bulk=False) + @res_labels.setter + def res_labels(self, value): + self.real.labels.set(value, bulk=False)