[英]Filter by multiple django-taggit tags with Django Rest Framework
如果所有提供的字詞都匹配,則默認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,只有在對象上存在所有標簽的情況下,我才可以獲取對象。
如果提供的任何標簽匹配,我是否有可能使此過濾器允許我進行過濾?
為我工作:
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
我已經設法通過自定義過濾器后端來做到這一點:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.