我在 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参数与其他参数映射?
答案 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