我使用[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__'
有可能吗
这意味着:
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.
相关问题 更多 >
编程相关推荐