如何在Django 1.11和Postgres 9.6中基于嵌套的JSONField注释计数

时间:2018-11-27 11:12:55

标签: python django postgresql

我的模型当前如下所示:

class Review(models.Model):
      source = models.CharField(max_length=80, blank=True, null=True)
      metadata = JSONField(default=dict)
      entity_type = models.CharField(max_length=255, blank=True, null=True)

类Review的示例查询集:

[{
  "id": 123,
  "source": "amazon",
  "entity_type": "media",
  "metadata": [
    {
      "product": 123456
    },
    {
      "product": 012345
    }
  ]
},
{
  "id": 1234,
  "source": "amazon",
  "entity_type": "media",
  "metadata": [
    {
      "product": 123456
    },
    {
      "product": 12345
    }
  ]
}]

我想基于“源”,“实体类型”,“元数据产品”注释计数

我说的是类似Django的查询:

Review.objects.filter().values(
 "source","entity_type","metadata__product"
).annotate(count=Count('id'))

这显然不起作用。

我想获取类似于以下内容的输出查询集:

[{"source": "amazon", "entity_type": "media", "metadata_product":
  123456, "count": 2}, 
 {"source": "amazon", "entity_type": "media","metadata_product":
  012345, "count": 1},
 {"source": "amazon", "entity_type": "media","metadata_product":
  12345, "count": 1}]

我想使用Django ORM来实现这一目标,而不是求助于python,因为该表包含的数据接近10或2000万。 如果无法做到这一点,那么如果有人可以建议将原始SQL查询放入Django ORM原始SQL方法中,那将是非常好的。

0 个答案:

没有答案