SELECT 在 JSONField 上使用 Django

SELECT on JSONField with Django

我的应用程序严重依赖 API,这些 API 会不可预测地更改它们 return 数据的方式。出于这个原因,我选择在 Django 中使用 PSQL 和 JSONFields。
我已经看到很多关于如何按 JSONField 中的值进行过滤的 examples/docs,但我还没有看到任何允许我对这些值进行 SELECT 的内容。

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

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

提前致谢!

答案是一个RawSQL表达式;

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

RawSQL的第一个参数就像一个模板字符串,第二个参数将填充第一个的%s

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

queryset.values('jsonfield__key_name') 

自 Django 2.1 起,order_by()values()values_list() 支持转换,因此您现在可以使用:

queryset.values('jsonfield__key_name')

这是相关的 ticket and pull request