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

如何用Django Rest Framework的ModelViewSet获取活跃所有者的活跃商品?

解决DRF ModelViewSet仅展示活跃所有者的活跃商品问题

问题原因

你注释的代码返回的是Python列表,而非Django的QuerySet对象。DRF的ModelViewSet在执行retrieve(通过PK获取单个商品)操作时,依赖QuerySet的get()方法定位资源,列表没有该方法,因此无法通过PK找到对应商品。

正确实现方式

直接使用Django ORM的关联过滤,同时筛选商品活跃和所有者活跃的条件,返回QuerySet即可。这样既满足需求,又能让DRF正常处理所有内置视图动作(列表、详情、搜索、排序):

class ProductViewSet(viewsets.ModelViewSet):
    serializer_class = ProductSerializer
    parser_classes = (MultiPartParser, FormParser)
    search_fields = ['title', 'description']
    ordering_fields = ['price', 'last_update']
    permission_classes = [permissions.IsAuthenticatedOrReadOnly, IsVendorOrReadOnly, IsOwnerOrReadOnly]

    def get_queryset(self):
        # 同时过滤活跃商品和活跃所有者
        return Product.objects.filter(is_active=True, owner__is_active=True)

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

说明

  • 使用owner__is_active=True通过外键关联筛选所有者状态,这是Django ORM的跨表查询语法,比Python循环遍历所有商品更高效,尤其适合数据量大的场景。
  • 返回的QuerySet支持DRF的搜索、排序等功能,不会影响原有视图的其他特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:00:46