You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django REST Framework中单独展示review_count字段

解决方案

首先纠正一个小问题:你期望的响应结构不是合法JSON(数组中不能直接放置"review_count": 2这类键值对),更规范的结构应该是包含总数和评论列表的对象,示例如下:

{
  "review_count": 2,
  "reviews": [
    {"user": "don sebastian","rating": 3.9,"review": "Rating for pendant 1 by Don","created_at": "2022-11-27","updated_at": "2022-11-27"},
    {"user": "Jackson Patrick Gomez","rating": 4.5,"review": "cool review Pendant 1","created_at": "2022-11-27","updated_at": "2022-11-29"}
  ]
}

如果坚持要类似数组的结构(不推荐),可以调整为[{"review_count":2}, {...}, {...}]的形式,不过规范的对象结构更利于前端解析。

以下是具体实现步骤:

1. 修改Serializer.py

移除序列化器中的review_count字段,让每条评论仅返回核心内容:

class ReviewSerializer(ModelSerializer):
    user = SerializerMethodField()

    class Meta:
        model = ReviewRatings
        fields = ["user", "rating", "review", "created_at", "updated_at"]

    def get_user(self, obj):
        return f"{obj.user.first_name} {obj.user.last_name}"

2. 修改Views.py

在视图中单独计算评论总数,再与序列化后的评论列表组合成目标响应结构:

class ShowReviews(APIView):
    def get(self, request, *args, **kwargs):
        product_slug = self.kwargs['product_slug']
        rating = request.GET.get('rating')
        reviews = ReviewRatings.objects.filter(product__slug=product_slug)
        review_count = reviews.count()

        if rating == 'lowest':
            reviews = reviews.order_by('rating')
        elif rating == 'highest':
            reviews = reviews.order_by('-rating')

        if not reviews:
            return Response({"error": "No reviews for this product yet"}, status=404)
        
        serializer = ReviewSerializer(reviews, many=True)
        # 构造规范的响应结构
        response_data = {
            "review_count": review_count,
            "reviews": serializer.data
        }
        # 若坚持使用数组结构,替换为以下代码
        # response_data = [{"review_count": review_count}] + serializer.data
        
        return Response(response_data, status=status.HTTP_200_OK)

实现说明

  • 序列化器不再处理review_count,避免每条评论携带重复的总数数据
  • 视图层单独计算总数后,将总数与评论列表组合,既满足需求又符合JSON规范

内容的提问来源于stack exchange,提问作者Sins97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:55:34