[Update] 优化user group serializer

pull/3960/head
ibuler 2020-04-29 16:01:14 +08:00
parent b6f5b335bd
commit f8c323cf5c
1 changed files with 11 additions and 6 deletions

View File

@ -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