Как перегруппировать результат по полям?

Мне нужно сделать просмотр "статистики" по некоторым проданным товарам. К сожалению, я теряюсь с annotate, aggregate, не могу получить желаемый результат.

У меня есть 2 модели:

class SaleProduct(models.Model):

    name = models.CharField(_('Name'), max_length=80)
    price = models.FloatField(_('price'))
    unit = models.CharField(_("unit"), max_length=20, default="€")
    tva = models.FloatField(_('tva'))
    dlc = models.DateField('dlc')

class Sale(models.Model):

    products = models.ManyToManyField(
        "sale.SaleProduct",
        related_name="sale_saleproducts",
        verbose_name=_("Products"),
        blank=True
    )
    paiement_method = models.CharField(_("paiement method"), max_length=255)
    sale_ok = models.BooleanField(_("status"), default=True)
    total = models.FloatField(_("Total"))

На фронтенде у меня есть таблица данных с 6 колонками:

  • Общее количество
  • Общее количество
  • Название (продукта)
  • DLC
  • Итого за DLC
  • Общее количество на DLC

Первое, что я не могу сделать: сгруппировать продукты по названию и DLC. Действительно, каждая строка таблицы должна соответствовать продукту с именем и уникальным DLC. Я могу с помощью queryset.distinct("name", "dlc"), но после distinct я не могу использовать annotate.

После правильной фильтрации этого запроса в первом столбце вычисляется сумма цен продуктов, имеющих одинаковое название, независимо от DLC. Второй столбец - это подсчет продуктов с одинаковым названием независимо от DLC.

В 3-й колонке - название продукта. 4-й столбец - DLC

5-й столбец - это сумма цен продуктов с одинаковым названием и одинаковым DLC. 6-й столбец - это количество продуктов с одинаковым названием и одинаковым DLC.

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