Home > Net >  How to use single nested serializer's data in more than one variable of parent serializer with
How to use single nested serializer's data in more than one variable of parent serializer with

Time:01-07

How can I get or store data of EmployeeSerializer somewhere so that I can use it again for getting active members count instead of making a new database call for getting count of active members?

class ProjectSerailizer(serializers.ModelSerializer):
  members = EmployeeSerializer(many=True)#returns all members of a project
  active_members_count = serializers.SerializerMethodField()# get count of members which are having status active
  class Meta:
    model = Project
    fields = ('id','name','members','active_members_count')
  
  def get_active_members_count(self,obj):
    #How can I omit this extra db call? as i am already having data in members variable from EmployeeSerializer, can i loop over members variable somehow and count the active ones?
    count = obj.members.filter(status='Active').count()
    return count

CodePudding user response:

You can set queryset in your view with select_related() and filtered annotate()

django.db.models import Count, Q

queryset = Project.objects.select_related('members').annotate(
    active_members_count = Count('members', filter=Q(members__status = 'Active'))
)

Then you will get active_members_count and other members fields in ProjectSerailizer without extra database calls

  •  Tags:  
  • Related