[英]SELECT on JSONField with Django
My application is heavily reliant on APIs that unpredictably make changes to the way they return data. 我的应用程序严重依赖API,这些API会意外地更改它们返回数据的方式。 For this reason, I've chosen to use PSQL and JSONFields with Django.
因此,我选择在Django中使用PSQL和JSONFields。
I've seen plenty of examples/docs on how to filter by values in a JSONField, but I haven't seen any that allow me to SELECT on these values. 我已经看到了很多有关如何按JSONField中的值进行过滤的示例/文档,但是我还没有看到任何允许我对这些值进行SELECT的示例/文档。
What I know works; 我所知道的有效;
queryset.filter(jsonfield__key_name = 'value')
What I want to know how to do; 我想知道怎么做;
queryset.values('jsonfield__key_name')
Thanks in advance! 提前致谢!
The answer is a RawSQL expression; 答案是RawSQL表达式。
queryset.annotate(value = RawSQL("(jsonfield->%s)", ('key_name',)))
queryset.values('value')
The first argument to RawSQL
is like a template string, the second argument will fill in the first's %s
RawSQL
的第一个参数就像一个模板字符串,第二个参数将填充第一个的%s
UPDATE: apparently Django 2.1+ now supports my original expected behavior; 更新:显然Django 2.1+现在支持我最初的预期行为;
queryset.values('jsonfield__key_name')
Since Django 2.1, transforms are supported in order_by()
, values()
and values_list()
, so you can now use this: 从Django 2.1开始,
order_by()
, values()
和values_list()
,因此您现在可以使用以下代码:
queryset.values('jsonfield__key_name')
Here's the relevant ticket and pull request . 这是相关的出票 请求 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.