从queryset中的jsonfield中选择值

时间:2017-07-30 13:56:56

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

请勿使用额外版本,因为django警告可能会弃用以下版本

改用RawSQL。

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