django - 从查询集中的 jsonfield 中选择值

标签 django postgresql

我有以下情况

class MyModel(models.Model):
    my_field = JSONField(null=True, blank=True)

my_field 是一个具有以下结构的 JSON 字段:

{
    "name": "some name"
    "id": "some hash id"
}

我想执行类似的操作: MyModel.objects.values(my_field__name)
这将等同于 postgres 查询:select my_field->>'name' from my_app_my_model
但我似乎无法让 django 生成所需的查询。
我得到的错误是:

FieldError: Cannot resolve keyword 'name' into field. Join on 'my_field' not permitted.

这里的主要目标是提供一个名为 fields 的字符串列表并运行以下命令: MyModel.objects.values(*fields) 所以我认为原始 sql 解决方案不适合这里。自定义查找用于 WHERE 子句,我不知道 SELECT 子句有任何等效项。
想过如何做到这一点吗?
谢谢!

最佳答案

目前 values 不支持 json 查找。您可以尝试使用 extra 来完成.

MyModel.objects.extra(select={'name':"my_field->>'name'"}).values('name')

关于django - 从查询集中的 jsonfield 中选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45400569/

相关文章:

Django 模型 : One to one relationship between objects of the same model class

postgresql - PL/PgSQL : No function matches the given name and argument types. 您可能需要添加显式类型转换

Postgresql Autodoc 安装 : "No rule to make target ` postgresql_autodoc. 1.in', `postgresql_autodoc.1' 需要。停止

sql - 具有 NULL 值的唯一列值组合

ruby-on-rails - rails 4.2 : Rake Task to Import CSV Issue

mysql - 在 RDBMS 中标记已删除条目的更好方法

python - 即使正确安装,导入包也会出错

python - 复制模型实例并更新字段

django - 错误: maximum recursion depth exceeded

Django 模板不显示