qg_*_*137 5 python django django-rest-framework
我可以使用下面的链接来过滤id=16的数据:
http://localhost:8000/api/physicalservertask/list_for_home_workpanel/?id=16
Run Code Online (Sandbox Code Playgroud)
这是我的列表api视图:
class PhysicalServerTaskListAPIView(ListAPIView):
serializer_class = PhysicalServerTaskListSerializer
permission_classes = [IsAdminUser]
def get_queryset(self):
query_params = self.request.query_params
filters = {'{}__contains'.format(key): value
for key, value in query_params.items()
}
return PhysicalServerTask.objects.filter(**filters)
Run Code Online (Sandbox Code Playgroud)
我有一个问题,如何id>= 16通过网址查询的数据列表?
我的意思是我是否可以通过:
http://localhost:8000/api/physicalservertask/list_for_home_workpanel/?id__gte=16
Run Code Online (Sandbox Code Playgroud)
过滤数据。
我知道我可以在ListAPIView查询中这样:
id_gte = self.request.query_params.copy().get('id_gte')
...
qs = PhysicalServerTask.objects.filter(**filters)
qs.filter(Q(id__gte=id__gte))
Run Code Online (Sandbox Code Playgroud)
但是是否有更方便的方法来实现这一目标?
您可以filter_fields像这样向视图添加属性:
class PhysicalServerTaskListAPIView(ListAPIView):
...
filter_fields = {
'id': ['gte', 'lte']
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以进行查询,例如:
http://localhost:8000/api/physicalservertask/list_for_home_workpanel/?id__gte=16
http://localhost:8000/api/physicalservertask/list_for_home_workpanel/?id__lte=16
Run Code Online (Sandbox Code Playgroud)
为此,您需要安装django-filter,如果尚不存在,请将其添加DjangoFilterBackend到您的系统中settings.py:
REST_FRAMEWORK = {
...
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
}
Run Code Online (Sandbox Code Playgroud)
filter_fields通常与模型字段列表一起使用以进行精确查找。但是,也可以像上面的示例一样提供字典,该字典将模型字段映射到其他类型的查找-例如gte和lte。
有关该filter_fields属性的更多信息,请参见此处。在列表/字典格式的详细信息filter_fields是在这里。
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |