【问题标题】:select value from jsonfield in queryset从查询集中的 jsonfield 中选择值
【发布时间】:2017-07-30 13:56:56
【问题描述】:

我有以下情况

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 子句的任何等效项。
有没有想过如何做到这一点?
谢谢!

【问题讨论】:

标签: django postgresql


【解决方案1】:

不要使用额外的,它可能会在下一个版本中被弃用,作为来自 django 的警告

改用 RawSQL。

MyModel.objects.annotate(name=RawSQL("myfield->>'name'")).values('name').filter(<put your conditions here>)

【讨论】:

    【解决方案2】:

    目前values 不支持 json 查找。你可以试试extra。

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

    【讨论】:

      猜你喜欢
      • 2013-10-26
      • 2018-10-02
      • 1970-01-01
      • 2020-10-08
      • 2017-08-28
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      相关资源
      最近更新 更多