在上一篇文章中,我们介绍了 django-filter 的基本功能。实际上 django-filter 还可以实现更高级的搜索,比如说文本的模糊查询,日期的范围查询。
继续我们的例子:
class Product(models.Model):
name = models.CharField(max_length=100)
created_at = models.DatetimeField()
class ProductSerializer(serializers.ModelSerializer):
class Meta:
fields = '__all__'
class ProductFilter(django_filters.FilterSet):
sort = django_filters.OrderingFilter(fields=('created_at',))
class Meta:
model = Product
fields = ['name',]
class ProductListView(generics.ListView):
queryset = Product.objects.all()
serializer_class = ProductSerializer
filter_backends = (DjangoFilterBackend,)
filter_class = ProductFilter
首先要实现按 name 的模糊查询。上面 ProductFilter 里面的 fields,如果是 list,默认就是按=来匹配。