【问题标题】:filter_fields not working in django restframeworkfilter_fields 在 django rest 框架中不起作用
【发布时间】:2021-11-08 12:45:32
【问题描述】:

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), ])

在这里,我想使用“类型”字段过滤横幅列表。但是 filter_fields 不能正常工作,它给出了表中的整个列表。提出解决此问题的建议。

【问题讨论】:

    标签: django-models django-rest-framework django-views


    【解决方案1】:

    您应该使用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',)
    

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 1970-01-01
      • 2016-12-25
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多