如何在Django1.11和postgres9.6中基于嵌套JSONField注释count

2024-06-02 05:43:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我的模型当前看起来像:

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)

课堂复习示例查询集:

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

我想根据“source”、“entity\u type”、“metadata\u product”注释count

我说的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,因为该表包含接近1000万或2000万的数据。 如果这是不可能的,这将是非常好的,如果有人可以建议原始SQL查询,可以把在Django ORM原始SQL方法。你知道吗


Tags: djangoidtruesourceamazonmodelstypecount