python - Django-Filter 返回请求对象
问题描述
我试图在 DRF 中使用 Django-filters 库动态过滤 Django 中的查询集,但过滤器发送的响应与请求完全相同,即如果我选择模式 = 传输响应是
{
"data": {
"mode": "transfer"
}
}
filterset_class 在视图中定义,查询集与请求类型一起传递给它。
视图.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-filters文档建议默认情况下可以使用 django-filter 后端,方法是将其添加到 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)
请注意,您可能需要序列化过滤后的查询集。
推荐阅读
- php - laravel 7 破坏路线不起作用,它将我重定向到显示路线
- c++ - 如何从对的向量中删除作为c ++中的类的对中的值项?
- r - 通过匹配对应的列,根据另一个表条件有效地添加一个 data.table 长度
- android - lateinit 属性 mapRoute 尚未初始化
- proxy - 为代理更新了 .condarc 文件,但仍无法下载软件包
- vue.js - 如何使用函数制作 v-for 下拉文本?
- python - 使用 pandas 将 json 导入数据框时出现问题
- javascript - 将信息从子组件传递给父组件
- oracle - Oracle 格式化整数和浮点数 11g
- html - 使用下一步按钮前进时,Angular Material Mat Horizontal Stepper 未选择正确的步骤