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: