【问题标题】:How to use single nested serializer's data in more than one variable of parent serializer with single db call in DRF?如何在 DRF 中通过单个 db 调用在多个父序列化器变量中使用单个嵌套序列化器的数据?
【发布时间】:2022-01-06 09:51:16
【问题描述】:

如何在某处获取或存储 EmployeeSerializer 的数据,以便我可以再次使用它来获取活跃成员数,而不是调用新的数据库来获取活跃成员数?

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

【问题讨论】:

    标签: python django rest django-rest-framework django-serializer


    【解决方案1】:

    您可以使用select_related() 和过滤annotate() 在您的视图中设置查询集

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

    然后您将在ProjectSerailizer 中获得active_members_count 和其他members 字段,而无需额外的数据库调用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多