django-rest-framework - 自定义过滤器和 Rest 框架不能同时工作
问题描述
我正在尝试在我的视图类中实现 Django 过滤器。但问题是当我使用filter_class
then 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')
我想要两个过滤器。我不确定我在这里做错了什么。任何帮助将不胜感激。提前致谢
解决方案
没错,如果您指定 a filterser_class
,则filter_fields
视图中的 将被忽略。解决方案很简单,只需将它们filter_fields
放在fields
您的LogsFilter
Meta 类中:
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')
推荐阅读
- python - 熊猫加入这两个数据帧会导致值错误,但不同版本的错误不同,为什么?
- next.js - Next.js 对包含 unicode 文件名(非 ascii)的文件抛出 404 错误
- php - 在 Laravel 中拖尾日志永远不会执行 Symfony 进程回调
- android-studio - 为什么当我使用 camerax "1.0.0-alpha06" 时,zoomRatio 会显示错误 Unresolved reference?
- postgresql - Rails 5 中 created_at 列的唯一索引会阻止同时创建记录吗?
- javascript - 如何在编辑 ajax 中选择 laravel 选项
- r - 如何从其他列创建列?
- c# - 如何按顺序编写窗口事件日志
- python - 将 Python 代码分成多行
- c++ - 如何创建指针链?我想创建具有指向更多对象的指针的对象,这些对象具有指针。这甚至可能吗?