我使用的是 Django 1.9 和 Postgres 9.5。我有一个带有 JSONField
(django.contrib.postgres.fields
) 的模型 (MyModel
)。 JSON 值在模型中的所有对象中具有相同的结构。
{
"key1": int_val_1,
"key2": int_val_2
}
我想通过我的 JSONField
中指定键的值对我的查询集进行排序。有点像
MyModel.objects.annotate(val=F('jsonfield__key1')).order_by('val')
这不起作用 - 我收到以下错误
Cannot resolve keyword 'key1' into field. Join on 'jsonfield' not permitted.
有什么办法可以实现吗?
最佳答案
对于 Django >= 1.11,您可以使用:
from django.contrib.postgres.fields.jsonb import KeyTextTransform
MyModel.objects.annotate(val=KeyTextTransform('key1', 'jsonfield')).order_by('val')
关于python - Django 注释 json 字段中的特定键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42114776/