需求
前端要查询一个时间段中的所有数据, 比如查询今天早上7:00到晚上7:00之间写的所有博客
后端使用django-filter就可以完美的实现
views.py
class BlogModelViewSet(ModelViewSet):
queryset = Blog.objects.all()
serializer_class = BlogModelSerializer
filter_backends = [DjangoFilterBackend]
filter_class = BlogFilter # 指定过滤器
models.py
class Blog(models.Model):
title = models.CharField(max_length=12)
create_time = models.DateTimeField()
自定义过滤器对时间进行过滤
filter.py
import django_filters
class BlogFilter(django_filters.rest_framework.FilterSet):
s_time = django_filters.DateTimeFilter(field_name='create_time', lookup_expr='gte') # 指定过滤的字段
e_time = django_filters.DateTimeFilter(field_name='create_time', lookup_expr='lte')
class Meta:
model = Blog
fields = ['s_time', 'e_time']
查询就可以实现过滤效果了
http://127.0.0.1:8000/?s_time=2020-12-02 12:00:00&e_time=2021-12-13 12:00:00
- 模糊查询
class BlogFilter(django_filters.rest_framework.FilterSet):
title = django_filters.CharFilter(field_name='title', lookup_expr='icontains')
class Meta:
model = Blog
fields = ['title']
参数说明: field_name 对应模型中的字段 lookup_expr 指定过滤使用的方法
icontains 就是模糊查询