如何在 DRF 中通过单个 db 调用在父序列化器的多个变量中使用单个嵌套序列化器的数据?
How to use single nested serializer's data in more than one variable of parent serializer with single db call in DRF?
我如何获取或存储 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
您可以在您的视图中使用 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
字段,而无需额外的数据库调用
我如何获取或存储 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
您可以在您的视图中使用 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
字段,而无需额外的数据库调用