用Django对JSONField进行SELECT[英] SELECT on JSONField with Django

本文是小编为大家收集整理的关于用Django对JSONField进行SELECT的处理方法,想解了用Django对JSONField进行SELECT的问题怎么解决?用Django对JSONField进行SELECT问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我的应用程序非常依赖API,这些API无法预测地改变了他们返回数据的方式.因此,我选择将psql和jsonfields与django一起使用.
我已经看到了很多示例/文档,介绍了如何在JSONFIELD中按值过滤的示例/文档,但是我还没有看到任何允许我选择这些值的示例/文档.

我所知道的有效;
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 拉请求.

本文地址:https://www.itbaoku.cn/post/1764169.html