Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.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 rest框架过滤器通过提供同一列的多个值返回空_Python_Django Rest Framework - Fatal编程技术网

Python django rest框架过滤器通过提供同一列的多个值返回空

Python django rest框架过滤器通过提供同一列的多个值返回空,python,django-rest-framework,Python,Django Rest Framework,我有一个名为OP的表,它有许多列,包括一个名为website的字符串类型的列。 使用Django rest framwork,我想过滤掉那些有website=FAO、BD、CD的行 现在,如果我使用https://...../op/?website=FAO,返回正确的数据,但如果我输入了许多值,如https://...../op/?website=FAO,CD,BD. 我怎样才能达到这个结果 这是我的代码和我的尝试 class op_filter(FilterSet) : #

我有一个名为OP的表,它有许多列,包括一个名为website的字符串类型的列。 使用Django rest framwork,我想过滤掉那些有website=FAO、BD、CD的行

现在,如果我使用
https://...../op/?website=FAO
,返回正确的数据,但如果我输入了许多值,如
https://...../op/?website=FAO,CD,BD.

我怎样才能达到这个结果

这是我的代码和我的尝试

class op_filter(FilterSet) :
    
    # website = filters.CharFilter('website')
    website = filters.CharFilter(method='filter_by_website')
    ......
    ......
    
    class Meta :
        model = Op
        fields = ['website',.........]

    def filter_by_website(self , queryset , name , value):
        # I get strings like FAO,CD,BD thats why I split it 
        website_name = set(value.strip().split(','))
        return queryset.filter(website__in=website_name)

class op_ViewSet(viewsets.ModelViewSet) :
    queryset = Op.objects.all().filter()
    serializer_class = op_Serializer
    # permission_classes = (permissions.IsAuthenticated,)

    pagination_class = PageNumberPagination
    filter_backends = [DjangoFilterBackend , SearchFilter , OrderingFilter]

    filter_class = op_filter
如何编写过滤函数,使其返回正确的数据

网站是OP表的一列


**

是否尝试更新视图集的
get\u queryset
?我知道你可以使用过滤器,但它可以帮助识别问题。就像这样:

class op_ViewSet(viewsets.ModelViewSet) :
    queryset = Op.objects.all() # No need to put filter here
    serializer_class = op_Serializer
    # permission_classes = (permissions.IsAuthenticated,)

    pagination_class = PageNumberPagination
    filter_backends = [DjangoFilterBackend , SearchFilter , OrderingFilter]

    def get_queryset(self):
        website_parameter = self.request.query_params.get('website', None)
        if website_parameter is not None:
            website_name = set(website_parameter.strip().split(','))
            return Op.objects.filter(website__in=website_name)
        return Op.objects.all()