官方文档: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 filters
from rest_framework.exceptions import ValidationError
class ShopFilter(filters.FilterSet):
# field_name 为数据库模型字段
# lookup_expr 为过滤字段,其他选项可参考 django_filters.conf.DEFAULTS
name = filters.NumberFilter(field_name='name', lookup_expr='exact')
class Meta:
model = models.Shop
fields = []
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 这里强制name为必要参数
# 参考:https://django-filter.readthedocs.io/en/latest/guide/rest_framework.html#overriding-filterset-creation
if 'name' not in kwargs['data']:
raise ValidationError({'name': '缺少查询字段'})
view.py
class ProductList(viewsets.ModelViewSet):
queryset = models.Shop.objects.all()
serializer_class = AccountSerializer
filterset_class = filter.ShopFilter