Django REST framework: Как создать конечную точку статистики?

Я изучаю DRF и застрял на этом несколько дней. Я пытаюсь создать конечную точку, которая получает диапазон дат .Ответ должен возвращать отчет с ежемесячным распределением продаж за выбранный период между датой_после и датой_до. Поле значения должно содержать общую сумму всех проданных продуктов в этом месяце.

Вход:
127.0.0.1:8000/api/stats/?date_after=2022-08-12&date_before=2022-08-29

Желаемый ответ:

[
  {
    month: “2022 Jan”,
    value: 18.00
  },
  { 
    month: “2022 Feb”,
    value: 36.00 
  },
]

Мои модели:

class Product(models.Model):
    title = models.CharField(max_length=200)
    price = models.DecimalField(max_digits=1_000, decimal_places=2)

    def __str__(self):
        return self.title


class Order(models.Model):
    date = models.DateField()  # TODO: Add auto_now_add True
    products = models.ManyToManyField(Product, blank=True, related_name='orders')

Мои наборы взглядов:

class ProductViewSet(viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer


class OrderViewSet(viewsets.ModelViewSet):
    queryset = Order.objects.all().order_by('-date')
    serializer_class = OrderSerializer

Мои сериализаторы:

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ['id', 'title', 'price']


class OrderSerializer(WritableNestedModelSerializer, serializers.ModelSerializer):
    products = ProductSerializer(many=True, required=False, read_only=False)

    class Meta:
        model = Order
        fields = ['id', 'date', 'products']

Я понятия не имею, как это сделать, поэтому просто вслепую изучаю документацию

Любая помощь будет высоко оценена.

Для добавления фильтров вы можете использовать https://github.com/philipn/django-rest-framework-filters

The django-rest-framework-filters package works together with the DjangoFilterBackend class, and allows you to easily create filters across relationships, or create multiple filter lookup types for a given field.

Вы можете создать специальные сериализаторы итогов и использовать агрегацию для получения суммарных значений для определенных месяцев.

Для получения дополнительной информации об агрегации обратитесь к документации django:

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