Python 使用django Rest框架按多个django taggit标记进行筛选
默认SearchFilter仅允许我们在所有提供的条款都匹配的情况下过滤我的案例中的标签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
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