从Django jsonfield中提取嵌套值

时间:2016-11-28 17:39:08

标签: django postgresql

有没有办法查询对象,'提取'来自JSONField字段的嵌套数据,然后将其作为Queryset的每个实例上的自定义临时字段提供?

在我的用例中,我将来自Twitter的API中的溢出元数据存储在data字段中供以后使用。我希望能够访问followers_count中的嵌套字段TwitterPost.data

我已经阅读了有关如何基于嵌套值进行过滤但未在生成查询集时如何将其作为临时字段提取的文档。

同样,我已经阅读了annotate文档以了解创建自定义临时字段的方法,但示例都在简单字段上使用聚合函数,因此不是JSONFields

提前感谢任何建议。

示例模型:

from django.contrib.postgres.fields import JSONField

class TwitterPost(models.Model):
    id = models.IntegerField()
    data = JSONField()

data字段的示例JSON值:

{
  'followers_count': 7172,
  "default_profile_image": false,
  "profile_text_color": "000000"
}

伪代码,我希望能够做到:

TwitterPost.objects.annotate(followers_count=instance.data.followers_count)

2 个答案:

答案 0 :(得分:2)

这可能是一个迟到的答案,实际上有一种方法可以做到这一点

value

OR KeyTextTransform可以用于KeyTransform(用于转换为字符串)

答案 1 :(得分:0)

如果要访问JSONField中的数据,则必须使用__。在你的例子中,它将是这样的

TwitterPost.objects.annotate(followers_count=instance.data__followers_count)

查看文档here