Django:通过多个ID过滤查询集

5
我的问题非常简单,我在我的Django REST应用程序中有一个模型Vendor。我希望使用get响应来获取一些ID,并返回所有具有这些ID的相应模型。GET URL模式可能是这样的:r'^api/vendors?id=1,2,3'
我现在考虑使用ListAPIView,并在list方法中使用url中的所有id过滤我的查询集。但我不确定如何实现这一点(使用id列表过滤查询集合,我对Python和Django都非常陌生),因此如果有人能提供任何建议,那将不胜感激。

1个回答

13

(很遗憾我不熟悉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)允许您选择具有此列表中值的内容


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接