gpt4 book ai didi

python - 如何过滤数据使用等于或大于 url 中的条件?

转载 作者:太空狗 更新时间:2023-10-30 02:37:18 25 4
gpt4 key购买 nike

我可以使用下面的链接来过滤 id=16 的数据:

http://localhost:8000/api/physicalservertask/list_for_home_workpanel/?id=16

这是我的列表 api View :

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)

有个问题,如何通过url查询id>=16的数据列表?

我的意思是我是否可以通过:

http://localhost:8000/api/physicalservertask/list_for_home_workpanel/?id__gte=16

过滤数据。

我知道我可以像这样在 ListAPIView 查询中:

id_gte = self.request.query_params.copy().get('id_gte')
...
qs = PhysicalServerTask.objects.filter(**filters)
qs.filter(Q(id__gte=id__gte))

但是有没有更方便的实现方式呢?

最佳答案

您可以像这样向您的 View 添加一个 filter_fields 属性:

class PhysicalServerTaskListAPIView(ListAPIView):
...
filter_fields = {
'id': ['gte', 'lte']
}

这将允许您进行查询,例如:

http://localhost:8000/api/physicalservertask/list_for_home_workpanel/?id__gte=16

http://localhost:8000/api/physicalservertask/list_for_home_workpanel/?id__lte=16

为此,您需要 install django-filter , 并将 DjangoFilterBackend 添加到您的 settings.py 中(如果它还不存在的话):

REST_FRAMEWORK = {
...
'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',)
}

filter_fields 通常与模型字段列表一起使用以进行精确查找。但是,也可以提供字典,如上例所示,它将模型字段映射到其他类型的查找 - 例如 gtelte

可以找到有关filter_fields 属性的更多信息here .关于 filter_fields 的列表/字典格式的更多信息是 here .

关于python - 如何过滤数据使用等于或大于 url 中的条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50524040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com