Sne*_*nde 5 python django django-filter
我有一个名为的模型Container,其中包含字段received和name。我用来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)
如何获得过滤后的结果?
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。
| 归档时间: |
|
| 查看次数: |
5969 次 |
| 最近记录: |