mirror of https://github.com/jumpserver/jumpserver
[Update] 优化user group serializer
parent
b6f5b335bd
commit
f8c323cf5c
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
from django.db.models import Prefetch
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from common.serializers import AdaptedBulkListSerializer
|
from common.serializers import AdaptedBulkListSerializer
|
||||||
|
@ -18,15 +18,18 @@ __all__ = [
|
||||||
class UserGroupSerializer(BulkOrgResourceModelSerializer):
|
class UserGroupSerializer(BulkOrgResourceModelSerializer):
|
||||||
users = serializers.PrimaryKeyRelatedField(
|
users = serializers.PrimaryKeyRelatedField(
|
||||||
required=False, many=True, queryset=User.objects, label=_('User'),
|
required=False, many=True, queryset=User.objects, label=_('User'),
|
||||||
# write_only=True, group can return many to many on detail
|
# write_only=True, # group can return many to many on detail
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = UserGroup
|
model = UserGroup
|
||||||
list_serializer_class = AdaptedBulkListSerializer
|
list_serializer_class = AdaptedBulkListSerializer
|
||||||
fields = [
|
fields_mini = ['id', 'name']
|
||||||
'id', 'name', 'users', 'users_amount', 'comment',
|
fields_small = fields_mini + [
|
||||||
'date_created', 'created_by',
|
'comment', 'date_created', 'created_by'
|
||||||
|
]
|
||||||
|
fields = fields_mini + fields_small + [
|
||||||
|
'users', 'users_amount',
|
||||||
]
|
]
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'created_by': {'label': _('Created by'), 'read_only': True}
|
'created_by': {'label': _('Created by'), 'read_only': True}
|
||||||
|
@ -50,5 +53,7 @@ class UserGroupSerializer(BulkOrgResourceModelSerializer):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_eager_loading(cls, queryset):
|
def setup_eager_loading(cls, queryset):
|
||||||
""" Perform necessary eager loading of data. """
|
""" Perform necessary eager loading of data. """
|
||||||
queryset = queryset.annotate(users_amount=Count('users'))
|
queryset = queryset.prefetch_related(
|
||||||
|
Prefetch('users', queryset=User.objects.only('id'))
|
||||||
|
).annotate(users_amount=Count('users'))
|
||||||
return queryset
|
return queryset
|
||||||
|
|
Loading…
Reference in New Issue