gpt4 book ai didi

python - 如何在 Django REST Framework 中将搜索参数添加到 GET 请求?

转载 作者:太空宇宙 更新时间:2023-11-03 13:16:53 29 4
gpt4 key购买 nike

通读并完成 Django REST Framework tutorial 后, 如何在 GET 请求上实现过滤器并不完全明显。例如,ListAPIView非常适合查看数据库中模型的所有实例。但是,如果我想限制结果(例如,对于 Book 模型,我可能想按出版日期或作者等限制结果)。看起来最好的方法是创建一个自定义序列化程序、 View 等,然后基本上手写所有内容。

有没有更好的办法?

最佳答案

搜索参数在django-rest-framework中称为过滤参数。有很多方法可以应用过滤,查看 documentation .

在大多数情况下,您只需要覆盖 View ,而不是序列化程序或任何其他模块。

一个明显的方法是覆盖 View 的查询集。示例:

# access to /api/foo/?category=animal

class FooListView(generics.ListAPIView):
model = Foo
serializer_class = FooSerializer

def get_queryset(self):
qs = super(FooListView, self).get_queryset()
category = self.request.query_params.get("category", None)
if category:
qs = qs.filter(category=category)
return qs

但是,django-rest-framework 允许使用 django-filter 自动执行此类操作。 .

首先安装它:

pip install django-filter

然后在您的 View 中指定您要过滤的字段:

class FooListView(generics.ListAPIView):
model = Foo
serializer_class = FooSerializer
filter_fields = ('category', )

这将执行与前面示例相同的操作,但使用的代码更少。

自定义这个过滤的方式有很多种,看herehere了解详情。

还有一种方法可以申请filtering globally :

REST_FRAMEWORK = {
'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',)
}

关于python - 如何在 Django REST Framework 中将搜索参数添加到 GET 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26924968/

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