python - Django 注释 json 字段中的特定键

标签 python json django postgresql django-queryset

我使用的是 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/

相关文章:

mysql - 我应该在 JSON 中编码大括号还是方括号?

java - Android 解析 JSON 数据时出错

python - Django 在 clean() 和 save() 之间锁定

python - 将二进制数据视为文件对象?

java - 生成器是否不如 "real"协程?

python - 如何在python中使用比较和 ' if not'?

java - 将 Json 值从 Android 发送到服务器并使用 SQL 将数据返回到 Android

python - Django 自定义登录模型出错

python - 如何将EC2 ip地址动态添加到Django ALLOWED_HOSTS

python - Windows 10 更新后无法在 Python3.7 中导入任何内容