mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-06-23 05:27:30 +00:00
perf: labels getter and setter for inherite model
This commit is contained in:
parent
6cd3672604
commit
a2d6e41816
@ -206,9 +206,12 @@ class AssetSerializer(BulkOrgResourceModelSerializer, ResourceLabelsMixin, Writa
|
|||||||
""" Perform necessary eager loading of data. """
|
""" Perform necessary eager loading of data. """
|
||||||
queryset = queryset.prefetch_related('domain', 'nodes', 'protocols', ) \
|
queryset = queryset.prefetch_related('domain', 'nodes', 'protocols', ) \
|
||||||
.prefetch_related('platform', 'platform__automation') \
|
.prefetch_related('platform', 'platform__automation') \
|
||||||
.prefetch_related('labels', 'labels__label') \
|
|
||||||
.annotate(category=F("platform__category")) \
|
.annotate(category=F("platform__category")) \
|
||||||
.annotate(type=F("platform__type"))
|
.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
|
return queryset
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -223,7 +223,7 @@ class LabelFilterBackend(filters.BaseFilterBackend):
|
|||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
model = queryset.model.label_model()
|
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
|
app_label = model._meta.app_label
|
||||||
model_name = model._meta.model_name
|
model_name = model._meta.model_name
|
||||||
|
|
||||||
|
@ -394,7 +394,7 @@ class CommonBulkModelSerializer(CommonBulkSerializerMixin, serializers.ModelSeri
|
|||||||
|
|
||||||
|
|
||||||
class ResourceLabelsMixin(serializers.Serializer):
|
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):
|
def update(self, instance, validated_data):
|
||||||
labels = validated_data.pop('labels', None)
|
labels = validated_data.pop('labels', None)
|
||||||
|
@ -2,13 +2,14 @@ from django.contrib.contenttypes.fields import GenericRelation
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models import OneToOneField
|
from django.db.models import OneToOneField
|
||||||
|
|
||||||
|
from common.utils import lazyproperty
|
||||||
from .models import LabeledResource
|
from .models import LabeledResource
|
||||||
|
|
||||||
__all__ = ['LabeledMixin']
|
__all__ = ['LabeledMixin']
|
||||||
|
|
||||||
|
|
||||||
class LabeledMixin(models.Model):
|
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:
|
class Meta:
|
||||||
abstract = True
|
abstract = True
|
||||||
@ -21,7 +22,7 @@ class LabeledMixin(models.Model):
|
|||||||
model = pk_field.related_model
|
model = pk_field.related_model
|
||||||
return model
|
return model
|
||||||
|
|
||||||
@property
|
@lazyproperty
|
||||||
def real(self):
|
def real(self):
|
||||||
pk_field = self._meta.pk
|
pk_field = self._meta.pk
|
||||||
if isinstance(pk_field, OneToOneField):
|
if isinstance(pk_field, OneToOneField):
|
||||||
@ -29,9 +30,9 @@ class LabeledMixin(models.Model):
|
|||||||
return self
|
return self
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def labels(self):
|
def res_labels(self):
|
||||||
return self.real._labels
|
return self.real.labels
|
||||||
|
|
||||||
@labels.setter
|
@res_labels.setter
|
||||||
def labels(self, value):
|
def res_labels(self, value):
|
||||||
self.real._labels.set(value, bulk=False)
|
self.real.labels.set(value, bulk=False)
|
||||||
|
Loading…
Reference in New Issue
Block a user