Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python djangofilterbackend查询参数和未填充的查询参数选项_Python_Django_Filtering_Django Filter - Fatal编程技术网

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

Python djangofilterbackend查询参数和未填充的查询参数选项,python,django,filtering,django-filter,Python,Django,Filtering,Django Filter,我想在django中创建viewset,它将获取带有查询参数的url,并根据查询参数进行过滤。我对文档的最大问题是它不能证明它们是白痴。以django rest框架文档为例 将与以下url一起使用: 但是如果我有一个没有设置category选项的url呢。这个密码会被破解吗?或者知道何时未填充查询参数过滤器并忽略它是否足够聪明 如果不是,我会想象我必须创建一个如下的过滤器: ass PurchaseList(generics.ListAPIView): serializer_class = P

我想在django中创建viewset,它将获取带有查询参数的url,并根据查询参数进行过滤。我对文档的最大问题是它不能证明它们是白痴。以django rest框架文档为例

将与以下url一起使用:

但是如果我有一个没有设置category选项的url呢。这个密码会被破解吗?或者知道何时未填充查询参数过滤器并忽略它是否足够聪明

如果不是,我会想象我必须创建一个如下的过滤器:

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 filter是一个非常强大的库,它使过滤和搜索变得非常简单。您提供的示例来自,它清楚地解释了视图集中过滤器的用法

正如问题所指出的那样,过滤器可以清晰地工作

此url提供使用类别筛选的产品列表-服装和库存为True

但是如果您不提供在
filter\u字段中指定的查询参数
like

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

因此,URL:

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

and 

http://example.com/api/products/
两者给出相同的结果。

当只应用一个过滤器时,它也起作用。 所以URL

两者给出相同的结果

最后,可以构建定制queryset,在定制queryset之前应用过滤器参数,如

def my_new_queryset(self):
    queryset = self.filter_queryset(self.get_queryset())
    // customize queryset 
    ...
或者,只需重写
filter\u queryset
方法即可进行一般筛选。

谢谢你,伙计,但是你的答案令人困惑。使用djangofilterbackend设置筛选器是否允许URL不存在查询参数或仅存在一个查询参数,即使有针对5的筛选器?我在中的意思是,我是否可以使用DjangoFilterBackend作为动态使用查询参数的djangobackend文档中所示的示例?正如不保证所有查询参数都存在一样?是的,它允许URL不存在查询参数。如示例所示,这没有什么区别。如果值存在,则查询参数将起作用,否则notok则可以安全地推断它也允许存在一些但并非所有的查询参数正确吗?
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 
    ...