Django DRF全局开启模糊查询

DjangoFilterBackend或者RestFrameworkFilterBackend在做指定字段查询时,默认为精确查询,如
api/v1/brand/brands/?name=huawei可以查到,api/v1/brand/brands/?name=hua是查不到的。

此时可以开启全局模糊查询,修改django settings配置文件:

REST_FRAMEWORK = {
    'DATETIME_FORMAT': '%Y-%m-%d %H:%M:%S',
    'DEFAULT_PAGINATION_CLASS': 'itom_cmdb.libs.frameworks.pagination.ItomPageNumberPagination',
    'DEFAULT_AUTHENTICATION_CLASSES': [
    ],
    'DEFAULT_FILTER_BACKENDS': [
        'rest_framework_filters.backends.RestFrameworkFilterBackend',
        'rest_framework.filters.SearchFilter',
        'rest_framework.filters.OrderingFilter',
    ],
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema',
    'EXCEPTION_HANDLER': 'itom_cmdb.libs.frameworks.exception_handler.exception_handler',
    'DEFAULT_METADATA_CLASS': 'itom_cmdb.libs.frameworks.simple_metadata.SimpleMetadataWithFilters',

}

#添加如下配置
#默认为exact
FILTERS_DEFAULT_LOOKUP_EXPR = 'contains'

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Django REST framework 中,可以使用 `django_filters` 库提供的 `CharFilter` 进行多个字段的模糊查询。示例如下: 假设有一个 `Book` 模型类,其中包含 `title` 和 `author` 两个字段,现在要查询标题或作者中包含 "Python" 的书籍: ```python from django_filters import rest_framework as filters class BookFilter(filters.FilterSet): search = filters.CharFilter(method="filter_search") class Meta: model = Book fields = ["search"] def filter_search(self, queryset, name, value): return queryset.filter(Q(title__icontains=value) | Q(author__icontains=value)) ``` 以上代码中,定义了一个名为 `search` 的过滤器字段,并指定了一个名为 `filter_search` 的方法来实现模糊查询。在 `filter_search` 方法中,使用 `Q` 对象和 `|` 运算符将两个模糊查询条件进行了 OR 运算,并返回了一个包含标题或作者中包含 "Python" 的书籍的查询集。 在视图中使用过滤器类进行查询: ```python class BookListAPIView(ListAPIView): queryset = Book.objects.all() serializer_class = BookSerializer filter_backends = [filters.DjangoFilterBackend] filterset_class = BookFilter ``` 以上代码中,指定了 `filterset_class` 属性为上面定义的 `BookFilter` 类,并将 `filter_backends` 属性设置为 `DjangoFilterBackend`,以启用过滤器功能。 最后,可以通过在 URL 中传递 `search` 参数来进行模糊查询: ``` http://example.com/api/books?search=Python ``` 以上 URL 将返回包含标题或作者中包含 "Python" 的书籍的查询集。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值