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