官方文档:https://django-filter.readthedocs.io/en/latest/index.html 以下例子结合 rest_framework 框架使用

安装

  1. PIP安装

    1. $ pip3 install django-filter
  2. 添加 django_filters 到 INSTALLED_APPS

    1. INSTALLED_APPS = [
    2. ...
    3. 'django_filters',
    4. ]

    使用

官方文档:https://django-filter.readthedocs.io/en/latest/guide/rest_framework.html

models.py

  1. class Shop(models.Model):
  2. name = models.CharField()

filter.py

注意:这里使用的是 rest_framework 下的 FilterSet

  1. from django_filters import rest_framework as filters
  2. from rest_framework.exceptions import ValidationError
  3. class ShopFilter(filters.FilterSet):
  4. # field_name 为数据库模型字段
  5. # lookup_expr 为过滤字段,其他选项可参考 django_filters.conf.DEFAULTS
  6. name = filters.NumberFilter(field_name='name', lookup_expr='exact')
  7. class Meta:
  8. model = models.Shop
  9. fields = []
  10. def __init__(self, *args, **kwargs):
  11. super().__init__(*args, **kwargs)
  12. # 这里强制name为必要参数
  13. # 参考:https://django-filter.readthedocs.io/en/latest/guide/rest_framework.html#overriding-filterset-creation
  14. if 'name' not in kwargs['data']:
  15. raise ValidationError({'name': '缺少查询字段'})

view.py

  1. class ProductList(viewsets.ModelViewSet):
  2. queryset = models.Shop.objects.all()
  3. serializer_class = AccountSerializer
  4. filterset_class = filter.ShopFilter

资料