drf 模糊查询多个字段
时间: 2023-07-20 19:13:21 浏览: 240
在 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" 的书籍的查询集。
阅读全文