最近项目中要做分类筛选,其实已经做了这个功能,但是有一个字段是MultiSelectField类型,包含多个值,用户提交的数据是单个值,无法查询出结果,

所以用到了自定义过滤

原代码

class InvestmentAgencyViewSet(viewsets.ModelViewSet):
""" Viewset for investcase model
"""
queryset = InvestmentAgency.objects.is_public()
serializer_class = InvestmentAgencySerializer
permission_classes = (
permissions.DjangoModelPermissions,
)
filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter,)
filter_fields = ('id', 'name', 'sector_type', 'investment_stage', 'country')
search_fields = ('name', )
ordering_fields = ('name', 'founded_time') def list(self, request, *args, **kwargs):
"""
add country data
"""
queryset = self.filter_queryset(self.get_queryset()) page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
res = add_country_in_list(serializer.data)
return self.get_paginated_response(res)
serializer = self.get_serializer(queryset, many=True)
res = add_country_in_list(serializer.data)
return Response(res)

  自定义过滤器后代码

#自定义的过滤器类,继承django_filters.rest_framework.FilterSet
class InvestFilter(django_filters.rest_framework.FilterSet):
sector_type =django_filters.CharFilter(lookup_expr='icontains')
class Meta:
model = InvestmentAgency
fields = ['id', 'name', 'sector_type', 'investment_stage', 'country']

  

class InvestmentAgencyViewSet(viewsets.ModelViewSet):
""" Viewset for investcase model
"""
queryset = InvestmentAgency.objects.is_public()
serializer_class = InvestmentAgencySerializer
permission_classes = (
permissions.DjangoModelPermissions,
)
filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter,)
filter_fields = ('id', 'name', 'sector_type', 'investment_stage', 'country')
search_fields = ('name', )
ordering_fields = ('name', 'founded_time')
filter_class = InvestFilter def list(self, request, *args, **kwargs):
"""
add country data
"""
queryset = self.filter_queryset(self.get_queryset()) page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
res = add_country_in_list(serializer.data)
return self.get_paginated_response(res)
serializer = self.get_serializer(queryset, many=True)
res = add_country_in_list(serializer.data)
return Response(res)

  其余django-filter使用参考

    https://www.jianshu.com/p/6dd900d38035

    https://blog.csdn.net/kuangshp128/article/details/78876254

最新文章

  1. Linux下用ftp更新web内容!
  2. Android studio git 本地仓库和远程仓库节点对比
  3. Android http超时选项的测试
  4. Web开发学习笔记
  5. __declspec(dllexport) & __declspec(dllimport)
  6. 有关于Algorithm的基础介绍
  7. css3 盒模型
  8. Lowest Bit(hdoj1196)
  9. 【Android Developers Training】 83. 实现高效网络访问来优化下载
  10. 从(0,0)到(m,n),每次走一步,只能向上或者向右走,有多少种路径走到(m,n)
  11. OTA和Recovery系统升级流程介绍
  12. jsonp 实现前端跨域
  13. 要求必须全部重复的数据sql--想了半天才写出来的
  14. Android 音视频深入 十六 FFmpeg 推流手机摄像头,实现直播 (附源码下载)
  15. Linux 安装python3.4
  16. Win7 VS2017编译Audacity2.1.3
  17. node-sass 安装失败 Failed at the node-sass@4.9.2 postinstall script的解决
  18. ssm 整合(方案二 maven)
  19. phpstorm 配置点右上角浏览器图标时用浏览器打开当前页面
  20. java数据类型之间的转换

热门文章

  1. 3:JavaBean,EJB,POJO
  2. CDOJ--1141
  3. Python3 笨方法 练习41(面向对象)详解及运行结果
  4. Hadoop生态圈-Hbase的API常见操作
  5. M-JPEG、MPEG4、H.264都有何区别
  6. Python入门系列教程(四)字典
  7. 如何创建一个https的站点(超简单) 以及 IIS7.5绑定Https域名
  8. Chip Factory(HDU5536 + 暴力 || 01字典树)
  9. JavaScript的基本介绍
  10. jQuery入门——(二)