Django Filter返回请求对象



我试图使用DRF中的Django过滤器库动态过滤Django中的查询集,但过滤器发送的响应与请求完全相同,即如果我选择模式=传输,则响应为

{
"data": {
"mode": "transfer"
}
}

filtersetclass在视图中定义,queryset与请求类型一起传递给它。

视图.py

from .filters import DataFilter
def get(self, request):
query_set = ModelName.objects.all()
queryset_filter = DataFilter(
request.GET, queryset=query_set)
return Response({"data": queryset_filter.data}, status=status.HTTP_200_OK)

过滤器.py

from django_filters import rest_framework as filters
from .models import ModelName
from common.models import MODE_CHOICES

class DataFilter(filters.FilterSet):
currency = filters.ModelMultipleChoiceFilter(lookup_expr='iexact')
coin_type = filters.ModelMultipleChoiceFilter(lookup_expr='iexact')
mode = filters.ModelChoiceFilter(
lookup_expr='iexact', choices=MODE_CHOICES)
max_amount = filters.NumberFilter(
field_name='price', lookup_expr='gt')
min_amount = filters.NumberFilter(
field_name='amount', lookup_expr='lt')
class Meta:
model = ModelName
fields = ('currency', 'coin_type', 'mode',
'max_amount', 'min_amount')

django过滤器文档建议,默认情况下,可以通过将django滤波器后端添加到default_filter_BACKENDS来使用它。是否有我丢失的配置或

filterset.data属性实际上是初始化时提供给DataFilter的数据/查询参数。在这种情况下,您将提供request.GET作为数据。

您想要访问的是过滤器集的.qs属性,它是经过过滤的结果。例如

def get(self, request):
queryset_filter = DataFilter(request.GET, queryset=ModelName.objects.all())
return Response({"data": queryset_filter.qs}, status=status.HTTP_200_OK)

请注意,您可能需要序列化已筛选的查询集。

最新更新