django过滤器-如何获取过滤的对象

Sne*_*nde 5 python django django-filter

我有一个名为的模型Container,其中包含字段receivedname。我用来django-filter过滤这些字段。过滤后得到结果:

<list.filters.AdvancedSearchListFilter object at 0x7f68cd698828>
Run Code Online (Sandbox Code Playgroud)

这是我的filter课程:

class AdvancedSearchListFilter(django_filters.FilterSet):

    field-1 = django_filters.DateFromToRangeFilter(label='Received Date Range')

    class Meta:
        model = Container
        fields = ['field-1', 'field-2']
Run Code Online (Sandbox Code Playgroud)

如何获得过滤后的结果?

For*_*rge 1

filter您应该像这样创建您的类的对象:

filter = FilterClass(query)
Run Code Online (Sandbox Code Playgroud)

其中querytype 是dict,例如 - 要获取所有名为的文件file.txt,请设置query{'name': 'file.txt'}.
您还可以指定queryset参数,但如果未提供参数,则在您的情况下将使用模型默认管理器中的所有项目queryset = Container.objects.all()


要获取过滤结果,请访问filter.qs或迭代filter

{% for obj in filter %}
    {{ obj.field-2 }} - ${{ obj.field-1 }}<br />
{% endfor %}
Run Code Online (Sandbox Code Playgroud)


另外,您没有指定 a lookup_type,默认情况下它是确切的术语。像这样添加lookup_type到你的类中:filter

  • 要搜索部分文本:
    field-1 = django_filters.CharFilter(lookup_type='icontains')
    要获取foofield-1 中的所有条目,请设置query{'field-1': 'foo'}

  • 要搜索早于以下日期的日期:
    field-2 = django_filters.DateFilter(lookup_type='lt')
    要获取今天之前收到的所有条目,请设置query{'field-2': datetime.date.today()}

如果您想搜索以下日期range
field-1 = django_filters.DateFromToRangeFilter()
要获取某个日期范围内收到的所有条目,请设置query{'received_0': start_date, 'field-1_1': end_date}

正式文档中有更多示例django-filter