官方文档:https://django-filter.readthedocs.io/en/latest/index.html 以下例子结合 rest_framework 框架使用
安装
PIP安装
$ pip3 install django-filter
添加 django_filters 到 INSTALLED_APPS
INSTALLED_APPS = [...'django_filters',]
使用
官方文档:https://django-filter.readthedocs.io/en/latest/guide/rest_framework.html
models.py
class Shop(models.Model):name = models.CharField()
filter.py
注意:这里使用的是 rest_framework 下的 FilterSet
from django_filters import rest_framework as filtersfrom rest_framework.exceptions import ValidationErrorclass ShopFilter(filters.FilterSet):# field_name 为数据库模型字段# lookup_expr 为过滤字段,其他选项可参考 django_filters.conf.DEFAULTSname = filters.NumberFilter(field_name='name', lookup_expr='exact')class Meta:model = models.Shopfields = []def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)# 这里强制name为必要参数# 参考:https://django-filter.readthedocs.io/en/latest/guide/rest_framework.html#overriding-filterset-creationif 'name' not in kwargs['data']:raise ValidationError({'name': '缺少查询字段'})
view.py
class ProductList(viewsets.ModelViewSet):queryset = models.Shop.objects.all()serializer_class = AccountSerializerfilterset_class = filter.ShopFilter
