我正在使用 Django Rest Frameworks 编写一个 api。该 api 获取客户列表。客户有许多项目。我的 api 应该返回包含已完成、待处理和总计项目数量的客户列表。我的 api 工作,但它有太多的 sql 查询。api是分页的
class ClientViewSet(ModelViewSet):
"""
A simple view for creating clients, updating and retrieving
"""
model = Client
queryset = Client.objects.all()
serializer_class = ClientSerializer
现在我的客户序列化器
class ClientSerializer(serializers.ModelSerializer):
total_projects_count = serializers.SerializerMethodField()
on_going_projects_count = serializers.SerializerMethodField()
completed_projects_count = serializers.SerializerMethodField()
class Meta:
model = Client
fields = __all__
def get_total_projects_count(self, obj):
return obj.total_projects_count()
def get_on_going_projects_count(self, obj):
return obj.on_going_project_count()
def get_completed_projects_count(self, obj):
return obj.completed_projects_count()
项目有一个客户端外键。我尝试使用注释来获取如下所有产品并进行分组。但是注释只在一个领域起作用。
projects = Project.objects.filter(client__in=queryset).values('client', 'status')
如何对多个字段进行分组并将该额外参数传递给序列化程序。或者有没有更好的方法。我也尝试了 prefetch_related 但 total_projects_count 仍在执行新的 sql 查询