Моя модель в настоящее время выглядит следующим образом:
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
}
]
}]
Я хочу аннотировать счет на основе «source», «entity_type», «metadata_product»"
Я говорю о запросе 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 или 20 миллионам.Если это невозможно, будет действительно хорошо, если кто-то может предложить необработанный SQL-запрос, который можно поместить в метод Django ORM raw SQL.