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

Django Rest-framework中ModelViewSet设置lookup_field后如何返回多条对象

问题原因说明

lookup_field是DRF为详情查询接口(retrieve) 提供的配置项,作用是匹配单个模型实例的查询字段,天生设计为返回单条对象,因此你当前的配置无法实现返回某产品下所有关联评价的需求。
序列化器Meta中配置的lookup_field = "product"属于无效配置,可直接删除。

实现方案

你可以根据自己的使用习惯任选以下方案:

方案1:重写get_queryset实现列表过滤(简单直观,适合固定过滤规则)

修改视图类代码如下:

class RatingViewSet(viewsets.ModelViewSet):
    queryset = Rating.objects.all()
    serializer_class = RatingSerializer
    # 删掉原有lookup_field配置
    
    def get_queryset(self):
        queryset = super().get_queryset()
        # 从请求查询参数中获取产品id
        product_id = self.request.query_params.get('product_id')
        if product_id:
            queryset = queryset.filter(product_id=product_id)
        return queryset

调用方式:请求GET /rating/?product_id=目标产品ID即可返回该产品下所有关联的Rating数据。

方案2:自定义action实现路径式查询(适合希望把产品ID放在URL路径中的场景)

修改视图类代码如下:

from rest_framework.decorators import action
from rest_framework.response import Response

class RatingViewSet(viewsets.ModelViewSet):
    queryset = Rating.objects.all()
    serializer_class = RatingSerializer

    @action(detail=False, methods=['get'], url_path=r'product/(?P<product_id>\d+)')
    def list_by_product(self, request, product_id=None):
        ratings = self.get_queryset().filter(product_id=product_id)
        serializer = self.get_serializer(ratings, many=True)
        return Response(serializer.data)

调用方式:请求GET /rating/product/目标产品ID/即可返回对应产品的所有评价列表。

方案3:使用DRF过滤组件(适合多条件过滤、后续有扩展过滤需求的场景)

  1. 先安装依赖:pip install django-filter
  2. 在项目settings.py中注册应用:
INSTALLED_APPS = [
    # 原有其他应用
    'django_filters',
]
  1. 修改视图类配置:
from django_filters.rest_framework import DjangoFilterBackend

class RatingViewSet(viewsets.ModelViewSet):
    queryset = Rating.objects.all()
    serializer_class = RatingSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['product', 'user', 'ratingpoint'] # 可自行添加需要支持过滤的字段

调用方式:除了可以通过GET /rating/?product=目标产品ID查询指定产品的评价外,还支持多条件组合过滤,比如GET /rating/?product=1&ratingpoint=5即可查询产品ID为1的所有5星评价。

内容的提问来源于stack exchange,提问作者Chen Triều

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:04