Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 搜索过滤器django drf_Python_Django_Django Rest Framework - Fatal编程技术网

Python 搜索过滤器django drf

Python 搜索过滤器django drf,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想一次将图像作为多个搜索关键字获取: views.py: class ImageSearchView(generics.ListAPIView): authentication_classes = [] permission_classes = [] queryset = Image.objects.all() serializer_class = ImageSearchSerializer filter_backends = (fi

我想一次将图像作为多个搜索关键字获取:

views.py:

class ImageSearchView(generics.ListAPIView):
      authentication_classes = []
      permission_classes = []
      queryset = Image.objects.all()
      serializer_class = ImageSearchSerializer
      filter_backends = (filters.SearchFilter,)
      search_fields = ['image_keyword']
models.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
URL.py:

    path('image_search/',views.ImageSearchView.as_view(), name = 'image_search'),
当我向邮递员提出请求时:

localhost:8000/api/image_search?search=boxing cricket kohli marykom
如果我把&放在它们之间,那么它也不起作用:

我想获得每一张包含关键字的图像,如任何搜索参数

我建议您使用django过滤器。对于这种情况,您可以在此处阅读更多内容:

如果您不想安装任何东西,您可以覆盖ListAPIView的get_queryset方法。您需要获取所需的所有查询参数,并返回由它们过滤的查询集。在这种情况下,您的代码如下所示:

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
在这种情况下,请确保从ImageSearchView类中删除filter_后端、search_字段和queryset字段。django rest framework filters包与django FilterBackend类一起工作,允许您轻松地跨关系创建筛选器,或为给定字段创建多个筛选器查找类型

阅读

我想这是你的一部分

title\u startswith=谁,title\u startswith=什么 标题\uuu从%3DWho开始,标题\uu从%3DWhat开始 title_uu开始与%3DWho | title_uu开始与%3DWhat %第28天开始时为%253DWho%29%20%7C%20%28天开始时为%253DWho%29%
筛选器=%28title\uuu startswith%253DWho%29%20%7C%20%28title\uuu startswith%253DWhat%29

您是否多次尝试这样指定搜索参数?在这种情况下,“搜索”查询参数应以列表形式结束

localhost:8000/api/image_search?search=&search=boxing&search=cricket&search=kohli&search=marykom

这回答了你的问题吗?不,我不想要这个,我只需要搜索关键字之间的条件你是否尝试过用这样的方式来分隔关键字:localhost:8000/api/image\u search?search=boxing&cricket&kohli&marykom?是的,它不起作用,请查看图像尝试:localhost:8000/api/image\u search?search=boxing,cricket,kohli,marykom@afkimage_关键字筛选器参数名称中存在键入错误。尝试固定版本的Snippet我认为如果我像这样搜索localhost:8000/api/image_search?search=boxer mary kom它会用精确的图像关键字显示图像如果只是搜索boxer,那么它不会返回任何内容如果我添加另一个不同图像的关键字,它没有显示任何东西是的,我试过只搜索一个参数