gpt4 book ai didi

python - 使用 URL 中的字段在 Django Rest Framework 的 ListAPIView 中进行过滤

转载 作者:太空宇宙 更新时间:2023-11-03 21:05:19 26 4
gpt4 key购买 nike

我使用Django Restframework的通用ListApiView,我使用的序列化器由许多其他序列化器(嵌套序列化器)组成。我需要知道如何使用 URL 中的关键字并将其传递给序列化器,以便我使用 URL 中的关键字过滤结果。

例如,我有一个 api View ,如下所示

class GetList(Generics.ListApiView):
serializer Class = ABCSerializer

我想从 URL 传递一个值,以过滤序列化器生成的结果的某些部分。此 ABCSerializer 由许多其他嵌套序列化器组成。我想使用 URL 中的值而不是主键来过滤结果。

在下面的示例中,它显示了基于 URL 中的用户名的过滤器。

url('^purchases/(?P<username>.+)/$', PurchaseList.as_view()),

我们可以编写一个 View ,返回按 URL 的用户名部分过滤的购买查询集:

class PurchaseList(generics.ListAPIView):
serializer_class = PurchaseSerializer

def get_queryset(self):
"""
This view should return a list of all the purchases for
the user as determined by the username portion of the URL.
"""
username = self.kwargs['username']
return Purchase.objects.filter(purchaser__username=username)

使用与上述相同的方法,我想使用基于用户名以外的字符串的过滤器查询,并将该字符串传递给序列化器。并将其用作嵌套序列化器中的过滤器。

谢谢

最佳答案

您可以使用 DjangoFilterBackend 来过滤模型的字段。

您可以按照以下步骤进行

  1. 将 Django Filter 安装到您的 Django 应用程序中。

    pip install django-filter

    将默认过滤器后端添加到您的settings.py

    REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
    }
  2. 输入您想要应用过滤器的 View / View 集的 filter_backends 属性。

    from django_filters.rest_framework import DjangoFilterBackend

    class PurchaseList(generics.ListAPIView):
    ...
    filter_backends = (DjangoFilterBackend,)
  3. 将模型上的字段列表添加到 View / View 集上的 filterset_fields 属性,以便将过滤器应用于这些字段。

    class PurchaseList(generics.ListAPIView):
    queryset = Purchase.objects.all()
    serializer_class = PurchaseSerializer
    filter_backends = (DjangoFilterBackend,)
    filterset_fields = ('category', 'other_field')

    我希望这能帮助您过滤 ListAPIViews。

更多详情请访问API Guide on Django filter

高级过滤器使用/访问包 django-rest-framework-filters

关于python - 使用 URL 中的字段在 Django Rest Framework 的 ListAPIView 中进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55447512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com