代码之家  ›  专栏  ›  技术社区  ›  Rakmo

Django筛选器获取查询集

  •  0
  • Rakmo  · 技术社区  · 6 年前

    我正在使用 django-filter 1.1.0版,Django 1.11。我想要一个模型的动态过滤器。我已经创建了filters.py,它包含模型过滤器的相应配置。 This site 告诉我们:

    它将生成一个包含搜索字段以及 返回筛选的查询集。

    这里指的是 SomeModelFilter 功能。我试着申请 len objects 函数到它的对象,但它返回

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

    我想得到过滤后的内容。对我来说,这似乎不是一个查询集。

    过滤器.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']
    

    视图.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 对象。

    1 回复  |  直到 6 年前
        1
  •  1
  •   neverwalkaloner    6 年前

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

    print(somemodel_filter.qs)
    

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