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', возможно, придется изменить для соответствия вашей БД.

Вернуться на верх