首页 > 解决方案 > 如何从 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'

解决方案是什么?

标签: djangodjango-rest-frameworkdjango-ormdjango-serializer

解决方案


无需序列化,只需传递monthly_salesto 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)

推荐阅读