Django:按多个 ID 过滤查询集

Syl*_*lph 5 python django django-queryset

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

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

Ste*_*ier 10

(不幸的是我不知道 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
Run Code Online (Sandbox Code Playgroud)

请注意,我正在输入所需的任何属性或其他属性

那这里发生了什么?

  • 覆盖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列表中具有值的内容