自定义过滤器和Rest框架无法同时工作

时间:2020-06-06 06:51:41

标签: django-rest-framework

我正在尝试在我的视图类中实现Django过滤器。但是问题是当我使用filter_class时,filter_fields和'search_fields'不起作用,反之亦然。

我的views.py代码是:

from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import OrderingFilter, SearchFilter

class CustomLoggerAPIView(generics.ListAPIView):
    authentication_classes = (authentication.TokenAuthentication,)
    permission_classes = (permissions.IsAuthenticated,permissions.IsAdminUser,)
    serializer_class = serializers.CustomLoggerSerializer
    filter_class = filters.LogsFilter
    queryset = models.CustomLogger.objects.all().order_by('-id')
    filter_backends = (DjangoFilterBackend, SearchFilter,)
    pagination_class = pagination.PostLimitOffsetPagination
    filter_fields = ('user','user_sensor','sensor_type',)
    search_fields = ('message')

和我的filters.py类:

class LogsFilter(django_filters.rest_framework.FilterSet):
    start_date = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='gte')
    end_date = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='lte')

    class Meta:
        model = models.CustomLogger
        fields = ('start_date', 'end_date')

我想要两个过滤器。我不确定我在做什么错。任何帮助将不胜感激。预先感谢

1 个答案:

答案 0 :(得分:1)

是的,如果您指定filterser_class,则视图中的filter_fields将被忽略。该解决方案很简单,只需将那些filter_fields放在您的fields元类的LogsFilter中:

class LogsFilter(django_filters.rest_framework.FilterSet):
    start_date = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='gte')
    end_date = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='lte')

    class Meta:
        model = models.CustomLogger
        fields = ('start_date', 'end_date', 'user','user_sensor','sensor_type')