gpt4 book ai didi

python - Django Rest Framework - 如何使用不同的查询参数格式?

转载 作者:太空宇宙 更新时间:2023-11-03 20:15:39 26 4
gpt4 key购买 nike

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

问题在于该组件使用完全不同的查询参数进行排序、过滤等。

vue-bootstrap4-table

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-framework需要这种格式:

../?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_search":"","per_page":10,"页":1}&page=1

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

我不知道有什么简单的方法可以让 DRF 自动处理这个问题。但是,由于“queryParams”的值是有效的 JSON,因此您可以在 ModelViewSet 上重写所需的方法。 This page描述了您可以覆盖的方法。要将 json 放入字典中,您可以执行 json.loads(request.query_params['queryParams']) 。从那时起,您可以使用 ORM 手动过滤和排序。

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

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

关于python - Django Rest Framework - 如何使用不同的查询参数格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58464857/

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