Получена ошибка 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