views.py
class BannerViewSet(ResponseViewMixin, viewsets.ModelViewSet):
serializer_class = BannerSerializers
queryset = Banner.objects.all()
filter_backends = (filters.SearchFilter, filters.OrderingFilter)
search_fields = ('title', 'sort_order', 'type')
filter_fields = ('type',)
def list(self, request, **kwargs):
try:
queryset = self.get_queryset()
queryset = self.filter_queryset(queryset)
serializer = BannerSerializers(queryset, many=True)
response_data = {'Banner': serializer.data}
return self.jp_response(s_code='HTTP_200_OK', data=response_data)
except Exception as e:
print(e)
return self.jp_error_response('HTTP_500_INTERNAL_SERVER_ERROR', 'EXCEPTION', [str(e), ])
在这里,我想使用"type“字段过滤横幅列表。但是filter_fields没有正常工作,它在表格中给出了整个列表。给出解决这个问题的建议。
发布于 2021-11-08 12:58:07
您应该使用django-filter
包来实现视图集所需的行为。你可以像这样使用它:
from django_filters.rest_framework import DjangoFilterBackend
class BannerViewSet(ResponseViewMixin, viewsets.ModelViewSet):
serializer_class = BannerSerializers
queryset = Banner.objects.all()
filter_backends = (filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend)
search_fields = ('title', 'sort_order', 'type')
filterset_fields = ('type',)
https://stackoverflow.com/questions/69883653
复制相似问题