【问题标题】:django-filter not working with django-rest-frameworkdjango-filter 不适用于 django-rest-framework
【发布时间】:2018-08-31 19:47:59
【问题描述】:

我正在使用Django 2.0Django REST FrameworkDjango Filters 来过滤查询集。

我已安装django-filters 并添加到INSTALLED_APPSdjango_filters

设置文件有

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication'
    ),
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated'
    ],
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}

和视图类是一样的

class AmountGivenViewSet(viewsets.ModelViewSet):
    serializer_class = AmountGivenSerializer
    permission_classes = (IsAuthenticated,)
    filterset_fields = ('contact__id',)

    def get_queryset(self):
        queryset = AmountGiven.objects.filter(
            contact__user=self.request.user
        )
        query = self.request.query_params.get('q', None)

        if query:
            queryset = queryset.filter(
                Q(transaction_number=query) |
                Q(comment__contains=query) |
                Q(amountreturned__transaction_number=query) |
                Q(amountreturned__comment__contains=query)
            )

        return queryset

AmountGiven 模型具有 contact 的外键,因此希望根据 contact_id 进行过滤。

现在当我尝试以下网址时

https://example.com/api/amount-given/?contact__id=3634de36-181c-4414-93fc-f08e3d70f1e3

它不过滤结果并返回所有AmountGiven记录。

【问题讨论】:

  • 其他过滤器有同样的问题吗?

标签: django-rest-framework django-filters


【解决方案1】:

尝试像这样为“filter_fields”更改 filterset_fields:

class AmountGivenViewSet(viewsets.ModelViewSet):
    serializer_class = AmountGivenSerializer
    permission_classes = (IsAuthenticated,)
    filterset_fields = ('contact__id',)

【讨论】:

  • 官方 django-filter 文档建议我们使用filterset_fields
  • 请注意 - filter_fields 参数已被弃用并重命名为 filterset_fields
猜你喜欢
  • 1970-01-01
  • 2021-06-23
  • 2018-03-06
  • 2016-08-06
  • 2018-10-02
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 2015-01-19
相关资源
最近更新 更多