Django在json字段中注释特定键

Mr *_* T. 9 python django postgresql json django-queryset

我正在使用Django 1.9和Postgres 9.5.我有一个MyModelJSONField(django.contrib.postgres.fields)的模型().JSON值在模型中的所有对象中具有相同的结构.

{
"key1": int_val_1,
"key2": int_val_2
}
Run Code Online (Sandbox Code Playgroud)

我想通过我的指定键的值来命令我的查询集JSONField.就像是

MyModel.objects.annotate(val=F('jsonfield__key1')).order_by('val')
Run Code Online (Sandbox Code Playgroud)

这不起作用 - 我收到以下错误

Cannot resolve keyword 'key1' into field. Join on 'jsonfield' not permitted.
Run Code Online (Sandbox Code Playgroud)

无论如何我能做到这一点吗?

sim*_*mon 12

对于Django> = 1.11,您可以使用:

from django.contrib.postgres.fields.jsonb import KeyTextTransform
MyModel.objects.annotate(val=KeyTextTransform('key1', 'jsonfield')).order_by('val')
Run Code Online (Sandbox Code Playgroud)

  • 我如何将其用于嵌套 json 字段?例如 jsonfield['key1']['key2'] (3认同)