django - 如何从 django orm annotate 创建 json 响应?
问题描述
我想创建每月销售报告并将其发送到前端。
这是我的serializers.py:
from .models import Sale
from rest_framework import serializers
class SaleSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Sale
fields = ['url', 'id', 'date', 'sku', 'product', 'quantity', 'price']
这是来自views.py的视图:
from django.db.models import Sum
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .serializers import SaleSerializer
from .models import Sale
@api_view()
def monthly_sales(request):
monthly_sales = Sale.objects.values(
'date__month').annotate(Sum('price'))
serializer = SaleSerializer(
monthly_sales, many=True, context={'request': request})
return Response(serializer.data)
当我转到浏览器时,我收到属性错误:
'dict' object has no attribute 'pk'
解决方案是什么?
解决方案
无需序列化,只需传递monthly_sales
to return Response(monthly_sales)
:
@api_view()
def monthly_sales(request):
monthly_sales = Sale.objects.values(
'date__month').annotate(Sum('price'))
serializer = SaleSerializer(
monthly_sales, many=True, context={'request': request})
return Response(monthly_sales)
推荐阅读
- reactjs - 为什么不通过以下代码中的道具工作?
- javascript - 将消息发布到 iframe 的正确方法是什么?
- ruby-on-rails - Rails 6 ActionMailer 参数在预览中为零
- javascript - 菜单不应该中断
- c++ - 使用 OpenCV 将 3D 点投影到不失真的 ROI
- apache-spark - Spark 1.6 - Unionall 操作的替代解决方案?
- javascript - 这些陈述可以写得更简洁吗?
- java - 检测信标的检测顺序?
- python - KERAS TUNER:“HyperParameters”类型的对象没有 len()
- javascript - 如果(条件)内部反应钩子调用?