如何将url参数映射到Django DRF中的其他过滤器字段?

时间:2018-07-26 16:53:42

标签: django django-rest-framework django-filter

我在 views.py 中:

class XYZAPIView(GenericAPIView):
    queryset = ABCModel.objects
    serializer_class = ABCModelSerializer
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('field_1',)

在url中,GET参数将以X的形式出现,这是从ABCModel到模型field_2的相关表中的字段。我不希望我的url参数为 field_2__X ,我只是希望其为 X ,是否可以通过任何通用方法或使用过滤器的解决方案.py ?如何以适当的方式在过滤器中将url参数与其他参数映射?

1 个答案:

答案 0 :(得分:0)

filters.py 中:

from rest_framework import generics
from django_filters import rest_framework as filters
from my_app.models import ABCModel


class XYZFilter(filters.FilterSet):
    X = filters.CharFilter(field_name='field_2__X', lookup_expr='exact')
    # In place of CharFilter, you can use your preferred filter type

    class Meta:
        model = ABCModel
        fields = ['field_1', 'X']

views.py 中:

class FormFieldAPIView(GenericAPIView):
    queryset = ABCModel.objects
    serializer_class = ABCModelSerializer
    filter_backends = (DjangoFilterBackend,)
    filter_class = XYZFilter

注意:在视图中,使用filter_class代替了filterset_class(在文档中指定)。在我的情况下,后者不起作用。如果有人对其行为有任何解释,请将其添加到此帖子上。

有关更多信息,请参阅Django-Filters Documentation