在django rest框架中创建搜索过滤器

在django rest框架中创建搜索过滤器,django,django-rest-framework,Django,Django Rest Framework,我试图让用户搜索图像,我已经通过了文件,但我不能理解。我已经安装了Django过滤器,但是我收到了这个错误 Traceback (most recent call last): File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner response = get_respons

我试图让用户搜索图像,我已经通过了文件,但我不能理解。我已经安装了Django过滤器,但是我收到了这个错误

Traceback (most recent call last):
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\django\views\generic\base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\rest_framework\views.py", line 495, in dispatch
    response = self.handle_exception(exc)
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\rest_framework\views.py", line 455, in handle_exception
    self.raise_uncaught_exception(exc)
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\rest_framework\views.py", line 492, in dispatch
    response = handler(request, *args, **kwargs)
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\rest_framework\generics.py", line 201, in get
    return self.list(request, *args, **kwargs)
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\rest_framework\mixins.py", line 47, in list
    serializer = self.get_serializer(queryset, many=True)
  File "C:\Users\dokunbam\Documents\python\instagram-clone\env\lib\site-packages\rest_framework\generics.py", line 112, in get_serializer
    return serializer_class(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'many'
目标是让用户通过“标签”、“所有者”或“图片url”搜索或过滤帖子

注释模型

class Photo(models.Model):
    post = models.TextField(max_length=140, default="")
    image_file = models.ImageField(upload_to='public/images', default='image.png')
    image_url = models.CharField(max_length=140, default='image.png')
    date_uploaded = models.DateTimeField(auto_now=True)
    owner = models.ForeignKey('auth.User', on_delete=models.CASCADE,)
    tags = models.CharField(max_length=10, default='img')

    class Meta:
        ordering = ('date_uploaded',)

    def __str__(self):
        return self.post
view.py

class PhotoSearchList(generics.ListAPIView):
    model = Photo
    serializer_class = PhotoFilterSerializer
    queryset = Photo.objects.all()
    filter_backends = (filters.SearchFilter,)
    filter_fields = ('tags', 'date_uploaded')
序列化程序.py

class PhotoFilterSerializer(filters.FilterSet):
    class Meta:
        model = Photo
        fields = ('tags', 'date_uploaded')
url.py

path('search/', views.PhotoSearchList.as_view()),
在设置中,我添加了文档中提到的内容

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}

我还在设置中为已安装的应用程序添加了“django_过滤器”

这里的问题是您的PhotoFilterSerializer扩展了错误的类。当它应该扩展ModelSerializer时,它正在扩展FilterSet

将其更改为:

from rest_framework import serializers

class PhotoFilterSerializer(serializers.ModelSerializer):
    ...
如果您希望使用专用类,可以创建一个光过滤器:

然后使用filterset_class属性在视图上分别指定:

class PhotoSearchList(generics.ListAPIView):
    ...
    serializer_class = PhotoFilterSerializer
    filterset_class = PhotoFilter

根据给出的代码片段,所提到的错误将不会出现。请添加错误回溯。除此之外,软件包还提供了有关筛选和搜索过程的适当文档。包括错误回溯。如果使用searchfilter,则需要指定搜索字段而不是筛选字段
class PhotoSearchList(generics.ListAPIView):
    ...
    serializer_class = PhotoFilterSerializer
    filterset_class = PhotoFilter