django-filter 获取查询集

django-filter get queryset

我正在使用 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. This site 说明:

It will generate a Django Form with the search fields as well as return the filtered QuerySet.

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

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 对象中。

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

print(somemodel_filter.qs)

您可以找到过滤器使用示例 here

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