我正在使用django-filter v1.1.0,django 1.11。我想要一个模型的动态过滤器。我创建了filters.py,其中包含模型过滤器的相应配置。 This site告诉我:
它将生成一个包含搜索字段的Django表单 返回已过滤的QuerySet。
这里指的是SomeModelFilter
功能。我尝试将len
和objects
函数应用于它的对象,但它返回
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
对象中。
答案 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
serialized_data = ExampleSerializer(filtered_queryset_data, many=true).data