django_filter过滤前端的时间段查询_模糊查询

需求

前端要查询一个时间段中的所有数据, 比如查询今天早上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 就是模糊查询

posted @ 2021-07-01 16:22  死里学  阅读(2027)  评论(1)    收藏  举报