在查询集中选取JSON字段中的值

8

I have the following situation

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对JSONField进行SELECT操作的重复问题。 - Endre Both
2个回答

5

目前values不支持JSON查找。你可以尝试使用extra来实现。

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

4

Don't use extra it might be deprecate for next versions as warning from django

Use RawSQL instead.

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接