【发布时间】:2020-12-29 09:30:45
【问题描述】:
我得到了以下查询集:
queryset = Expense.objects
.annotate(month=TruncMonth('expense_date'))
.values('month')
.annotate(total_cost=Sum('cost'))
.values('month', 'total_cost')
.order_by("month")
这基本上汇总了所有费用成本并按月分组。如果我只是打印出查询集,它就可以正常工作:
<QuerySet [{'month': datetime.date(2020, 9, 1), 'total_cost': Decimal('1029772.00')}]>
但是,如果我尝试对其进行序列化:
serializer = ExpenseSerializer(queryset, many=True)
我明白了
Got KeyError when attempting to get a value for field `cost` on serializer `ExpenseSerializer`.\nThe serializer field might be named incorrectly and not match any attribute or key on the `dict` instance.\nOriginal exception text was: 'cost'."
serializer.py:
class ExpenseSerializer(serializers.ModelSerializer):
class Meta:
model = Expense
exclude = ("receipt", )
有什么大惊小怪的?
【问题讨论】:
-
您的查询集不包含
.cost,因为.values(..)只会传递month和total_cost。换句话说,您的ExpenseSerializer被构造为序列化Expense对象,而不是其他值的字典。
标签: django django-rest-framework django-queryset django-serializer