我的应用程序在很大程度上依赖于API,这些API会对返回数据的方式进行不可预测的更改。出于这个原因,我选择在Django中使用PSQL和JSONFields。
我已经看过很多关于如何在JSONField中按值过滤的示例/文档,但我还没有看到任何允许我选择这些值的示例/文档。
我所知道的是有效的;
queryset.filter(jsonfield__key_name = 'value')
我想知道该怎么做;
queryset.values('jsonfield__key_name')
提前感谢!
发布于 2017-02-22 07:19:40
答案是一个RawSQL表达式;
queryset.annotate(value = RawSQL("(jsonfield->%s)", ('key_name',)))
queryset.values('value')
RawSQL
的第一个参数类似于模板字符串,第二个参数将填充第一个参数的%s
更新:显然Django 2.1+现在支持我最初的预期行为;
queryset.values('jsonfield__key_name')
发布于 2019-03-08 18:29:04
从Django2.1开始,order_by()
、values()
和values_list()
都支持转换,所以你现在可以使用:
queryset.values('jsonfield__key_name')
下面是相关的ticket和pull request。
https://stackoverflow.com/questions/42379475
复制相似问题