python - 搜索过滤器 django drf
问题描述
我想一次将图像作为多个搜索关键字:
视图.py:
class ImageSearchView(generics.ListAPIView):
authentication_classes = []
permission_classes = []
queryset = Image.objects.all()
serializer_class = ImageSearchSerializer
filter_backends = (filters.SearchFilter,)
search_fields = ['image_keyword']
模型.py:
class Image(models.Model):
license_type = (
('Royalty-Free','Royalty-Free'),
('Rights-Managed','Rights-Managed')
)
image_number = models.CharField(default=random_image_number,max_length=12,unique=True)
title = models.CharField(default=random_image_number,max_length = 100)
image = models.ImageField(upload_to = 'image' , default = 'demo/demo.png')
thumbnail = models.ImageField(upload_to='thumbs', blank=True, null=True)
category = models.ForeignKey('Category', null=True, blank=True, on_delete=models.CASCADE)
shoot = models.ForeignKey(ImageShoot, on_delete=models.CASCADE, related_name='Image', null=True,blank=True)
image_keyword = models.TextField(max_length=1000)
def __str__(self):
return self.title
网址.py:
path('image_search/',views.ImageSearchView.as_view(), name = 'image_search'),
当我向邮递员提出要求时:
localhost:8000/api/image_search?search=boxing cricket kohli marykom
如果我将 & 放在它们之间,那么它也不起作用:
解决方案
我建议你使用django-filter
这种情况,你可以在这里阅读更多:
https://www.django-rest-framework.org/api-guide/filtering/#djangofilterbackend
https://django-filter.readthedocs.io/en/latest/guide/rest_framework.html
如果您不想安装任何东西 - 您可以get_queryset
覆盖ListAPIView
. 您需要获取所需的所有查询参数并返回由它们过滤的查询集。在这种情况下,您的代码将如下所示:
def get_queryset(self, request, *args, **kwargs):
queryset = Image.objects.all()
keywords = self.request.query_params.get('search')
if keywords:
queryset = queryset.filter(image_keyword__in=keywords.split(','))
return queryset
在这种情况下,请确保从类中删除filter_backends
,search_fields
和queryset
字段ImageSearchView
推荐阅读
- java - 嵌套的 While 循环和嵌套的 if...else Java
- python - 有没有办法改变 matplotlib 中 x/y 刻度的 alpha 值?
- javascript - 如何将 JS 数组传递给 PHP
- python - Scrapy - 将抓取的数据返回给函数(Python)
- arrays - 找出矩阵中权重最小和权重最大的路径
- html - 删除 HTML Textarea 调整大小图标
- vue.js - 如何使 Vue 属性与 Vue 中的另一个属性有条件?
- c++ - Ubuntu上的opencv dnn模块问题
- geometry - 计算移动圆接触矩形时的位置
- laravel - 获取表 laravel 中选定行的 id