rest_framework_mongoengine实现搜索
直接只用rest_framework的搜索会不起作用
settings
'DEFAULT_FILTER_BACKENDS': [ 'rest_framework.filters.SearchFilter', # 模糊搜索 # 'django_filters.rest_framework.DjangoFilterBackend' # 精准搜索(完全匹配) ]
view
# 资产类型 class CiTypeViewSet(ModelViewSet): queryset = CiType.objects.all() serializer_class = CiTypeSerializer permission_classes = [ IsAuthenticated, CmdbModelPermissions] # 注意权限,不然会报错 <class 'AttributeError'> 'QuerySet' object has no attribute 'model' search_fields = ['name'] # 模糊搜索的字段域
那么就需要重写filter_backends,经过研究只需要重写filter_queryset就行了,最终view如下
为rest_framework_mongoengine改进view
# 资产类型 class CiTypeViewSet(ModelViewSet): queryset = CiType.objects.all() serializer_class = CiTypeSerializer # filter_backends = [SearchFilter] 自定义搜索类 permission_classes = [ IsAuthenticated, CmdbModelPermissions] # 注意权限,不然会报错 <class 'AttributeError'> 'QuerySet' object has no attribute 'model' search_fields = ['name'] # 模糊搜索的字段域 def filter_queryset(self, queryset): # 兼容mongo搜索,重写filter_queryset search = self.request.query_params.get('search') # 通过先封装成一个字典再用**运算符解包,完美解决 if search: q = Q() for field in self.search_fields: zip_field = {field + '__icontains': search} q = q | Q(**zip_field) queryset = queryset.filter(q) return queryset
参考文章:https://blog.csdn.net/weixin_42144277/article/details/105839070
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2019-11-18 sh命令