mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-17 15:59:04 +00:00
[Update] 优化user group serializer
This commit is contained in:
@@ -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
|
||||||
|
Reference in New Issue
Block a user