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 就是模糊查询


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM