我的应用程序严重依赖于API,这些API会无法预测地更改返回数据的方式。出于这个原因,我选择将PSQL和JSONField与Django一起使用 我已经看到很多关于如何通过JSONField中的值进行过滤的示例/文档,但我还没有看到任何允许我对这些值进行SELECT的内容。
我所知道的有用;
queryset.filter(jsonfield__key_name = 'value')
我想知道怎么做;
queryset.values('jsonfield__key_name')
提前致谢!
答案 0 :(得分:3)
答案是RawSQL表达式;
queryset.annotate(value = RawSQL("(jsonfield->%s)", ('key_name',)))
queryset.values('value')
RawSQL
的第一个参数就像一个模板字符串,第二个参数将填入第一个%s
更新:显然Django 2.1+现在支持我原来预期的行为;
queryset.values('jsonfield__key_name')
答案 1 :(得分:1)
从Django 2.1开始,order_by()
,values()
和values_list()
支持转换,因此您现在可以使用此功能:
queryset.values('jsonfield__key_name')
这里是相关的ticket和pull request。