Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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框架按多个django taggit标记进行筛选_Python_Django_Tags_Django Rest Framework_Django Taggit - Fatal编程技术网

Python 使用django Rest框架按多个django taggit标记进行筛选

Python 使用django Rest框架按多个django taggit标记进行筛选,python,django,tags,django-rest-framework,django-taggit,Python,Django,Tags,Django Rest Framework,Django Taggit,默认SearchFilter仅允许我们在所有提供的条款都匹配的情况下过滤我的案例中的标签 class MyModelViewSet(viewsets.ReadOnlyModelViewSet): filter_backends = (filters.SearchFilter, ) search_fields = ('tags__name',) serializer_class = MyModelSerializer model = MyModel quer

默认SearchFilter仅允许我们在所有提供的条款都匹配的情况下过滤我的案例中的标签

class MyModelViewSet(viewsets.ReadOnlyModelViewSet):
    filter_backends = (filters.SearchFilter, )
    search_fields = ('tags__name',)
    serializer_class = MyModelSerializer
    model = MyModel
    queryset = MyModel.objects.all()
然后,过滤可用于:

http://localhost:8000/api/v1/objects/?search=tag1,tag2
使用上面的URL,只有当对象上存在所有标记时,我才能获取对象


如果提供的任何标记匹配,我是否可以使用此筛选器进行筛选?

我已成功使用自定义筛选器后端进行筛选:

class TagsFilter(filters.BaseFilterBackend):
    """
    Return all objects which match any of the provided tags
    """

    def filter_queryset(self, request, queryset, view):
        tags = request.query_params.get('tags', None)
        if tags:
            tags = tags.split(',')
            queryset = queryset.filter(tags__name__in=tags).distinct()

        return queryset
为我工作:

from django_filters import rest_framework as filters

class TagsFilter(filters.CharFilter):
    def filter(self, qs, value):
        if value:
            tags = [tag.strip() for tag in value.split(',')]
            qs = qs.filter(tags__name__in=tags).distinct()

        return qs


class MediaPublicationFilter(filters.FilterSet):
    tags = TagsFilter(name="tags")

    class Meta:
        model = MediaPublication