Получена ошибка KeyError при попытке получить значение для поля `date` в сериализаторе

Я пытаюсь сделать набор запросов, чтобы показать дату__месяц и общую сумму всех цен продаж

class RevenueChartListView(ListAPIView):
    queryset = Transactions.objects.annotate(month=ExtractMonth('date')).values('month').annotate(revenue=Sum('sale_price')).order_by('month')
    serializer_class = RevenueSerializer
class RevenueSerializer(serializers.ModelSerializer):
    class Meta:
        model = Transactions
        fields = ['date', 'sale_price']

Однако я получаю ошибку

"Got KeyError when attempting to get a value for field `date` on serializer `RevenueSerializer`.\nThe serializer field might be named incorrectly and not match any attribute or key on the `dict` instance.\nOriginal exception text was: 'date'."

Ваш кверсет возвращает не объекты модели, а словари с month и revenue в качестве ключа, поэтому вы сериализуете с:

class RevenueChartSerializer(serializers.Serializer):
    month = models.IntegerField()
    revenue = models.IntegerField()  # or perhaps a FloatField?

и подключаете этот сериализатор:

class RevenueChartListView(ListAPIView):
    queryset = (
        Transactions.objects.annotate(month=ExtractMonth('date'))
        .values('month')
        .annotate(revenue=Sum('sale_price'))
        .order_by('month')
    )
    serializer_class = RevenueChartSerializer

обратите внимание, что вы можете упростить набор запросов до:

class RevenueChartListView(ListAPIView):
    queryset = (
        Transactions.objects.values(month=ExtractMonth('date'))
        .annotate(revenue=Sum('sale_price'))
        .order_by('month')
    )
    serializer_class = RevenueChartSerializer
Вернуться на верх