gpt4 book ai didi

python - djangofilterbackend 查询参数和未填充的查询参数选项

转载 作者:行者123 更新时间:2023-12-01 02:51:17 25 4
gpt4 key购买 nike

我想在 django 中创建 View 集,它将采用带有查询参数的 url 并根据查询参数进行过滤。我对文档的最大问题是它不能证明它们是白痴。以 django Rest Framework 文档 http://www.django-rest-framework.org/api-guide/filtering/ 为例

class ProductList(generics.ListAPIView):
queryset = Product.objects.all()
serializer_class = ProductSerializer
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('category', 'in_stock')

它将与以下网址一起使用:

http://example.com/api/products?category=clothing&in_stock=True

但是如果我有一个没有设置类别选项的网址怎么办?这段代码会被破坏吗?或者它是否足够聪明,可以知道查询参数过滤器何时未填充并忽略它?

如果不是,那么我想我必须创建一个像这样的过滤器:

ass PurchaseList(generics.ListAPIView):
serializer_class = PurchaseSerializer

def get_queryset(self):
"""
Optionally restricts the returned purchases to a given user,
by filtering against a `username` query parameter in the URL.
"""
queryset = Purchase.objects.all()
username = self.request.query_params.get('username', None)
if username is not None:
queryset = queryset.filter(purchaser__username=username)
return queryset

这很好,但这是否意味着 djangofilterbackend 库仅适用于保证过滤器的用例?如果没有,请有人给我提供一个例子,因为文档没有意识到我愚蠢至极。

谢谢

最佳答案

Django过滤器是一个非常强大的库,它使过滤和搜索变得非常容易。您提供的示例来自django filter docs这清楚地解释了 View 集中过滤器的用法。

正如问题所指出的,过滤器显然可以在

http://example.com/api/products?category=clothing&in_stock=True

此网址提供按类别 - 服装和库存 - True 过滤的产品列表。

但是如果您不提供 filter_fields 中指定的查询参数,例如

http://example.com/api/products/

然后,这会给出未应用任何过滤的产品列表,因此,如果不需要应用过滤,则无需在 url 中提供查询参数。

所以网址:

http://example.com/api/products?category=&in_stock=

and

http://example.com/api/products/

两者给出相同的结果。

当只应应用一个过滤器时,它也适用。所以网址

http://example.com/api/products?category=clothing

and

http://example.com/api/products?category=clothing&in_stock=

两者给出相同的结果

最后,可以构建自定义查询集,在自定义查询集之前应用过滤器参数,例如

def my_new_queryset(self):
queryset = self.filter_queryset(self.get_queryset())
// customize queryset
...

或者,只需重写 filter_queryset 方法即可进行通用过滤。 http://www.django-rest-framework.org/api-guide/filtering/#custom-generic-filtering

关于python - djangofilterbackend 查询参数和未填充的查询参数选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44742603/

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