简体   繁体   English

django-filter 获取查询集

[英]django-filter get queryset

I am using django-filter v1.1.0 , django 1.11.我正在使用django-filter v1.1.0 ,django 1.11。 I want a dynamic filter for a model.我想要一个模型的动态过滤器。 I have created filters.py which contains the respective config for model filters.我创建了filters.py,其中包含模型过滤器的相应配置。 This site tells that: 这个网站告诉我:

It will generate a Django Form with the search fields as well as return the filtered QuerySet.它将生成一个带有搜索字段的 Django 表单并返回过滤后的 QuerySet。

It here refers to SomeModelFilter function.这里指的是SomeModelFilter函数。 I tried applying len and objects functions to it's object, but it returns我尝试将lenobjects函数应用于它的对象,但它返回

AttributeError: 'SomeModelFilter' object has no attribute 'len'
AttributeError: 'SomeModelFilter' object has no attribute 'objects'

I want to get the filtered content.我想获取过滤后的内容。 It doesn't seem to be a QuerySet to me.对我来说,它似乎不是 QuerySet。

filters.py过滤器.py

from project_app.models import *
import django_filters


class SomeModelFilter(django_filters.FilterSet):
    class Meta:
        model = SomeModel
        fields = ['field_a', 'field_b', 'field_c', 'field_d']

views.py视图.py

    somemodel_list = SomeModel.objects.all()
    somemodel_filter = SomeModelFilter(request.GET, queryset=somemodel_list)

    print(len(somemodel_filter)) # This gives the first error
    print(somemodel_filter.objects.all()) # This gives the second error

I want to get the filtered content, hopefully which is contained in somemodel_filter object.我想获得过滤后的内容,希望它包含在somemodel_filter对象中。

The problem is in this line print(somemodel_filter.objects.all()) .问题出在这行print(somemodel_filter.objects.all()) somemodel_filter is not model, it's filterset instance and since it's don't have objects attribute. somemodel_filter不是模型,它是 filterset 实例,因为它没有objects属性。 To get filtered queryset use qs attribute, like this:要获取过滤的查询集,请使用qs属性,如下所示:

print(somemodel_filter.qs)

You can find example of filter usage here .您可以在此处找到过滤器使用示例。

filtered_data = ExampleFilter(requet.Get, queryset=Example.objects.all())

to get the filtered queryset获取过滤后的查询集

filtered_queryset_data = filtered_data.qs

Use serializer to serialize the data.使用序列化程序来序列化数据。 Use many=true since the its a list使用 many=true 因为它是一个列表

serialized_data = ExampleSerializer(filtered_queryset_data, many=true).data

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM