From f8c323cf5c4cf4834c6648d143482637fe13f308 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 29 Apr 2020 16:01:14 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E4=BC=98=E5=8C=96user=20group=20ser?= =?UTF-8?q?ializer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/users/serializers/group.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/apps/users/serializers/group.py b/apps/users/serializers/group.py index 078ceb8a8..01fa104fc 100644 --- a/apps/users/serializers/group.py +++ b/apps/users/serializers/group.py @@ -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