来讲解一下使用django filters实现数据过滤的示例代码的攻略。
什么是django filters
django filters是django框架的一个插件库,用于实现数据过滤,可以在django的view视图函数、模板中使用,十分实用。
它提供了很多数据过滤的方法和内置的一些数据过滤器,在我们查询和过滤数据时,可以大大提升开发效率。
django filters的使用
1. 安装django-filters
在使用django-filters之前需要先安装它。
pip install django-filters
2. 配置django-filters
在settings.py文件中,将django-filters加入INSTALLED_APPS
INSTALLED_APPS = [
...
'django_filters',
...
]
3. 创建django filters的应用
在我们的django项目中,可以创建一个filters.py,专门来存放所有的django filters。
# myapp/filters.py
import django_filters
from myapp.models import City
class CityFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='icontains')
state = django_filters.CharFilter(lookup_expr='icontains')
country = django_filters.CharFilter(lookup_expr='icontains')
class Meta:
model = City
fields = ('name', 'state', 'country')
4. 在django视图中使用filters
在视图函数中,我们需要使用filters对数据进行过滤,然后将过滤后的数据传递给模板页面。
# myapp/views.py
from django.shortcuts import render
from myapp.models import City
from myapp.filters import CityFilter
def city_list(request):
cities = City.objects.all()
city_filter = CityFilter(request.GET, queryset=cities)
return render(request, 'city_list.html', {'filter': city_filter})
5. 在django模板页面中添加过滤表单控件
在模板中添加过滤表单控件,用于实现过滤数据的操作。
<!-- myapp/templates/city_list.html -->
{% extends 'base.html' %}
{% block content %}
<h1>City List</h1>
<form method="get">
{{ filter.form.as_p }}
<input type="submit" value="Search">
</form>
<table>
<thead>
<tr>
<th>Name</th>
<th>State</th>
<th>Country</th>
</tr>
</thead>
<tbody>
{% for city in filter.qs %}
<tr>
<td>{{ city.name }}</td>
<td>{{ city.state }}</td>
<td>{{ city.country }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
到这里,django filters的使用就结束了,当我们访问city_list视图函数对应的页面的时候,就可以在页面上看到一个过滤表单,通过它可以过滤city的数据了。
django filters实现数据过滤的两个示例
下面来讲两个django filters实现数据过滤的示例。
示例1
我们有一个名为Goods的模型,其中有一个字段名为name,现在我们需要在django filters中使用模糊查询来搜索满足用户输入关键字的Goods的结果。
# myapp/filters.py
import django_filters
from myapp.models import Goods
class GoodsFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='icontains')
class Meta:
model = Goods
fields = ['name']
其中,通过CharFilter指定了模糊查询的方法为icontains。
示例2
我们有一个名为Book的模型,其中有一个字段名为created_at,现在我们需要在django filters中使用时间过滤器,来搜索创建时间在特定时间范围之内的Book对象。
# myapp/filters.py
import django_filters
from myapp.models import Book
class BookFilter(django_filters.FilterSet):
created_at = django_filters.DateFromToRangeFilter()
class Meta:
model = Book
fields = ['created_at']
其中,通过DateFromToRangeFilter使用数据范围过滤器来过滤创建时间。
至此,两个django filters实现数据过滤的示例就结束了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django filters实现数据过滤的示例代码 - Python技术站