1

我的应用程序严重依赖 API,这些 API 会意外地更改它们返回数据的方式。出于这个原因,我选择在 Django 中使用 PSQL 和 JSONFields。
我已经看过很多关于如何按 JSONField 中的值进行过滤的示例/文档,但是我还没有看到任何允许我对这些值进行 SELECT 的示例/文档。

我所知道的有效;
queryset.filter(jsonfield__key_name = 'value')

我想知道怎么做;
queryset.values('jsonfield__key_name')

提前致谢!

4

2 回答 2

5

答案是一个 RawSQL 表达式;

queryset.annotate(value = RawSQL("(jsonfield->%s)", ('key_name',)))
queryset.values('value')

第一个参数RawSQL类似于模板字符串,第二个参数将填充第一个参数%s

更新:显然 Django 2.1+ 现在支持我原来的预期行为;

queryset.values('jsonfield__key_name') 
于 2017-02-21T23:19:40.087 回答
3

从 Django 2.1 开始,在和中支持转换order_by(),因此您现在可以使用它:values()values_list()

queryset.values('jsonfield__key_name')

这是相关的票证拉取请求

于 2019-03-08T10:29:03.920 回答