一.定義model
[](javascript:void(0)😉
# models.py
class Product(models.Model):
name = models.CharField(max_length=255)
author = models.CharField(max_length=255)
price = models.DecimalField()
description = models.TextField()
[](javascript:void(0)😉
二.定義filter
[](javascript:void(0)😉
# filters.py
import django_filters
class ProductFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='iexact') # iexact表示精確匹配, 並且忽略大小寫
author = django_filters.CharFilter(lookup_expr='icontains') #icontains表示模糊查詢(包含),並且忽略大小寫
price = django_filters.NumberFilter(look_expr='exact') #exact表示精確匹配
desc = django_filters.CharFilter('description', lookup_expr='contains') #對'description'字段進行操作,不填默認為desc
#price__lte = django_filters.NumberFilter('price', lookup_expr='lte') #lte表示小於
#price__gte = django_filters.NumberFilter('price', look_expr='gte') # gte表示大於
class Meta:
model = Product
fields = ['name', 'author', 'price', 'description']
#fields = {
'price': ['lt', 'gt']
}
[](javascript:void(0)😉
三.views中使用
[](javascript:void(0)😉
class ProductViewSets(mixins.ListModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.CreateModelMixin,
viewsets.GenericViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
filter_backends = (DjangoFilterBackend,)
filter_class = ProductFilter
search_fields = ('name', 'description') # 模糊搜索的字段
ordering_fields = ('price',) # 排序的字段