需求
前端要查詢一個時間段中的所有數據, 比如查詢今天早上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 就是模糊查詢