Django Rest框架如何使用不同的查询参数格式?

2024-05-15 14:32:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用[https://www.npmjs.com/package/vue-bootstrap4-table#8-filtering][1]django-rest-framework

问题是这个组件使用完全不同的查询参数进行排序、过滤等

vue-bootstrap4-表

http://127.0.0.1:8000/api/products/?queryParams=%7B%22sort%22:[],%22filters%22:[%7B%22type%22:%22simple%22,%22name%22:%22code%22,%22text%22:%22xxx%22%7D],%22global_search%22:%22%22,%22per_page%22:10,%22page%22:1%7D&page=1

"filters":[{"type":"simple","name":"code","text":"xxx"}],

而Django rest框架需要这种格式:

../?code__icontains=...

我想弄清楚如何使DRF接受这种格式而不是内置格式

我只用ViewSet

class ProductViewSet(viewsets.ModelViewSet):
    serializer_class = ProductSerializer
    filter_class = ProductFilter
    filter_backends = [filters.OrderingFilter]
    ordering_fields = '__all__'

有可能吗


Tags: httpscomrestpackagewww格式tablecode
1条回答
网友
1楼 · 发布于 2024-05-15 14:32:20

这意味着:

http://127.0.0.1:8000/api/products/?queryParams={“sort”:[],“filters”:[{“type”:“simple”,“name”:“code”,“text”:“xxx”}],“global\u search”:“,”,“per\u page”:10,“page”:1}&;页码=1

看起来您仍然应该手动将这些参数序列化为正确的格式,或者在请求体中发送它们,而不是作为查询参数

我不知道有没有一种无痛的方法让DRF自动处理这个问题。但是,由于'queryParams'的值是有效的JSON,因此可以重写ModelViewSet上所需的方法This page描述可以重写的方法。要将json放入dict,可以执行json.loads(request.query_params['queryParams'])。从那时起,您可以使用ORM手动过滤和排序

当然,也可以将查询参数转换为“常规”查询参数客户端。这是一个很好的库,可以帮助您解决:https://medialize.github.io/URI.js/

而且,允许用户针对任何字段进行排序通常是不明智的。对于产品来说,这可能是相对较低的风险,但是don't make it a common practice.

相关问题 更多 >