Django запрос: FOR EACH month AND name SUM values
Что мне нужно: за каждый месяц мне нужно получить общее количество продаж (SUM) от Джона и Мэри. В базе данных есть и другие люди, но мне нужна информация только от них обоих.
[
["19-Nov", "John", 511.97], ["19-Nov", "Mary", 0],
["19-Dec", "John", 568.21], ["19-Dec", "Mary", 1542.08],
["20-Jan", "John", 621.20], ["20-Jan", "Mary", 401.06],
["20-Feb", "John", 621.39], ["20-Feb", "Mary", 0],
["20-Mar", "John", 0], ["20-Mar", "Mary", 871.14],
["20-Apr", "John", 604.25], ["20-Apr", "Mary", 653.34],
["20-May", "John", 584.94], ["20-May", "Mary", 1218.43],
]
Дата должна быть отформатирована в этом типе "Год-Месяц" по порядку (от самых старых до самых новых). Общая сумма продаж, даже если она равна нулю, должна быть напечатана.
Моя модель Django:
class Sellers(models.Model):
date = models.DateField()
name = models.CharField(max_length=300)
value = models.DecimalField(max_digits=19, decimal_places=2)
Можно ли создать всего один запрос Django для получения данных в этом формате?
Tks!
Должно сработать что-то похожее на это.
from django.db.models import F, Func, Value, CharField,Sum
Sellers.objects.filter(
name__in=['Jhon','Mary']
).annotate(
formatted_date=Func(
F('date'),
Value('YY-Mon'),
function='to_char',
output_field=CharField()
)
).values(
'name','formatted_date'
).annotate(
sales_sum=Sum('value')
).order_by('formatted_date')
Функцию Postgre 'to_char', возможно, придется изменить для соответствия вашей БД.