django-filter获取查询集

时间:2018-05-28 09:38:11

标签: python django django-filter

我正在使用django-filter v1.1.0,django 1.11。我想要一个模型的动态过滤器。我创建了filters.py,其中包含模型过滤器的相应配置。 This site告诉我:

  

它将生成一个包含搜索字段的Django表单   返回已过滤的QuerySet。

这里指的是SomeModelFilter功能。我尝试将lenobjects函数应用于它的对象,但它返回

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

我想获取已过滤的内容。它对我来说似乎不是一个QuerySet。

filters.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

    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

我想获取已过滤的内容,希望它包含在somemodel_filter对象中。

2 个答案:

答案 0 :(得分:1)

问题出在这一行print(somemodel_filter.objects.all())somemodel_filter不是模型,它是过滤器实例,因为它没有objects属性。要获取筛选的查询集,请使用qs属性,如下所示:

print(somemodel_filter.qs)

您可以找到过滤器使用情况here的示例。

答案 1 :(得分:0)

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

获取过滤后的查询集

filtered_queryset_data = filtered_data.qs

使用序列化器序列化数据。使用many = true,因为它是一个列表

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