Django:按多个ID过滤查询集

问题描述 投票:1回答:1

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

我现在想的是使用ListAPIView,并在list方法中使用url中的所有id过滤我的queryset。但我不确定如何实现这一点(使用id列表过滤查询集,我对Python和Django都很新),所以如果有人可以就此提供任何建议,我将不胜感激。

python django django-queryset
1个回答
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

请注意,我忽略了所需的任何属性或其他属性

What's happening here then?

  • 覆盖get_queryset将控制我们从视图中获得的结果
  • self.request.GET.get('id')将从url中提取id查询参数的值,因此localhost:8000/api/vendors?id=1,2,3结果将是字符串“1,2,3”。
  • filter(id__in=ids)允许您说出在此ID列表中选择具有值的内容
© www.soinside.com 2019 - 2024. All rights reserved.