pri*_*moz 2 python tags django django-taggit 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()
Run Code Online (Sandbox Code Playgroud)
然后进行过滤:
http://localhost:8000/api/v1/objects/?search=tag1,tag2
Run Code Online (Sandbox Code Playgroud)
通过上面的 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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2046 次 |
最近记录: |