mirror of https://github.com/jumpserver/jumpserver
[Update] 优化user group serializer
parent
b6f5b335bd
commit
f8c323cf5c
|
@ -1,7 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from django.db.models import Prefetch
|
||||
from rest_framework import serializers
|
||||
|
||||
from common.serializers import AdaptedBulkListSerializer
|
||||
|
@ -18,15 +18,18 @@ __all__ = [
|
|||
class UserGroupSerializer(BulkOrgResourceModelSerializer):
|
||||
users = serializers.PrimaryKeyRelatedField(
|
||||
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:
|
||||
model = UserGroup
|
||||
list_serializer_class = AdaptedBulkListSerializer
|
||||
fields = [
|
||||
'id', 'name', 'users', 'users_amount', 'comment',
|
||||
'date_created', 'created_by',
|
||||
fields_mini = ['id', 'name']
|
||||
fields_small = fields_mini + [
|
||||
'comment', 'date_created', 'created_by'
|
||||
]
|
||||
fields = fields_mini + fields_small + [
|
||||
'users', 'users_amount',
|
||||
]
|
||||
extra_kwargs = {
|
||||
'created_by': {'label': _('Created by'), 'read_only': True}
|
||||
|
@ -50,5 +53,7 @@ class UserGroupSerializer(BulkOrgResourceModelSerializer):
|
|||
@classmethod
|
||||
def setup_eager_loading(cls, queryset):
|
||||
""" 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
|
||||
|
|
Loading…
Reference in New Issue