vue.js - 如何使用 django 的 OR 和 AND 运算符创建正确的过滤器字符串?
问题描述
我的应用在 vue.js 上有一个前端,在 django rest 框架上有一个后端。我需要在 vue 上做一个过滤字符串,它应该做这样的事情:
((status=closed) | (status=canceled)) & (priority=middle)
但得到一个错误作为响应
[“无效的查询字符串运算符。匹配:') & '。”]
编码后我的字符串如下所示:
?filters=((status%3D%D0%97%D0%B0%D0%BA%D1%80%D1%8B%D1%82)%20%7C%20(status%3D%D0%9E%D1%82%D0%BA%D0%BB%D0%BE%D0%BD%D0%B5%D0%BD))%20%26%20(priority%3D%D0%A1%D1%80%D0%B5%D0%B4%D0%BD%D0%B8%D0%B9)
对应于
?filters=((status=closed)|(status=canceled))&(priority=middle)
应该如何为 django 寻找正确的过滤器字符串?
|
如果语句包含 only或 only ,我没有问题&
。例如,像这样的过滤器字符串非常完美:
?filters=(status%3D%D0%97%D0%B0%D0%BA%D1%80%D1%8B%D1%82)%20%7C%20(status%3D%D0%9E%D1%82%D0%BA%D0%BB%D0%BE%D0%BD%D0%B5%D0%BD)
又名?filters=(status=closed)|(status=canceled)
。但是如果我&
在它之后添加一个和额外的括号来指定条件计算的顺序,它会失败并出现错误。
我还尝试减少括号的使用,并有这样的字符串(作为实验):
?filters=(status%3D%D0%97%D0%B0%D0%BA%D1%80%D1%8B%D1%82%20%7C%20status%3D%D0%9E%D1%82%D0%BA%D0%BB%D0%BE%D0%BD%D0%B5%D0%BD)
又名?filters=(status=closed | status=canceled)
。这个不起作用 - 既没有错误也没有数据。
在我的情况下,我需要有一个混合的结果:状态(关闭和取消)和优先级=中间,但字符串格式不正确。请解释一下,哪种格式可以?
解决方案
这看起来不像您尝试在那里使用的对 uri 非常友好的语法。
尝试这样做:
?status[]=closed&status[]=cancelled&priority=middle
然后用于request.GET.getlist('status[]')
取回列表并使用逻辑 OR 查询集过滤的值:
qs = qs.filter(status__in=request.GET.getlist('status[]', [])
然后添加任何作为逻辑与的附加过滤。
如果您使用的是 axios,它应该自动将 js status
url 参数格式化为正确的格式。
推荐阅读
- class - SharedPreferences.getInstance() 在类构造函数之前
- html - flexbox 中的图像无法正确缩放
- python - tensorflow object detection max proposal 到底是什么意思?
- redux-form - 如何动态更改 FieldArray 中的组件类型
- javascript - 在 bootstrap-vue 模态组件外部单击会生成 onClick 事件
- couchdb - CouchDB 错误 -Malformed AuthSession cookie -- 版本 2,2
- wordpress - Wordpress 编辑器奇怪的脚本
- r - r 将 png 设备的大小设置为 grob 大小
- actionscript-3 - 在 AS3 中使用 sharedObject 保存和加载
- sql-server - 活动监视器在 SSMS 17.8.1 中始终暂停