Django:按多个ID过滤queryset

时间:2018-09-04 14:35:35

标签: python django django-queryset

我的查询非常简单,我的Django REST应用程序中有一个模型Vendor。我想要的是使用带有几个ID的get响应,并使用这些ID取回所有各个模型。 GET网址格式可能是这样的:r'^api/vendors?id=1,2,3'

我现在正在考虑使用ListAPIView,并在list方法中使用URL中的所有ID过滤我的查询集。但是我不确定究竟如何实现(用id列表过滤查询集,我对Python和Django都是陌生的),因此,如果有人可以提供任何建议,将不胜感激。

1 个答案:

答案 0 :(得分:4)

(很遗憾,我不知道django REST,所以这里是一个纯django解决方案)

使用ListAPIView,您可以访问URL(或GET)参数并修改查询集。

class MyVendorView(ListAPIView):
    # attributes

    def get_queryset(self):
        id_string = self.request.GET.get('id')
        if id_string is not None:
            ids = [int(id) for id in id_string.split(',')]
            return Vendor.objects.filter(id__in=ids)

        else:
            return Vendor.objects.all()

    # other methods

请注意,我正在对任何需要的属性或其他属性进行归类

那么这是怎么回事?

  • 覆盖get_queryset将控制我们从点击视图中获得的结果

  • self.request.GET.get('id')将从URL中提取id查询参数的值,就像localhost:8000/api/vendors?id=1,2,3这样,结果将是字符串“ 1,2,3”。

  • filter(id__in=ids)允许您说选择在此列表 IDs

  • 中具有值的内容