我正在覆盖def get_queryset(self),以汇总模型的平均值、总和等.我的挑战是我想要返回这些值,但它不是一个查询集,所以我得到以下错误:django.template.response.ContentNotRenderedError: The response content must be rendered before it can be iterated over..我的问题是如何返回这些值,因为它们不是查询集.

以下是我的代码:

class OrderMetrics(generics.ListCreateAPIView ):
    queryset = Order.objects.all()
    serializer_class = OrderSerializer

    def get_queryset(self):
        ...

        context = [ 
            {
            'data': round(current_total),
            'percent': abs(total_delta_percentage),
            },
            {
            'data': current_count,
            'percent': abs(avergae_delta_percentage),
            },
        ]

        print(context)
        return Response(context, status=status.HTTP_200_OK)



# print(context) returns the following:
# [{'data': 138378, 'percent': 132}, {'data': 11, 'percent': 16}]

我还看到了其他几个类似的问题,但它们没有解决如何做到这一点: ContentNotRenderedError: The response content must be rendered before it can be iterated over. Django REST个 和 ContentNotRenderedError : The response content must be rendered before it can be iterated over

推荐答案

正如它的名字所暗示的,百岁老人应该回来了,…A QuerySet,而不是响应对象.您可以try 传递一个列表,因为它也是可迭代的,但如果执行分页、序列化等操作,它最终可能会失败.

您可以通过以下方式自己实现list方法:

class OrderMetrics(generics.ListCreateAPIView):
    queryset = Order.objects.all()
    serializer_class = OrderSerializer

    def list(self, request, *args, **kwargs):
        context = [
            {
                'data': round(current_total),
                'percent': abs(total_delta_percentage),
            },
            {
                'data': current_count,
                'percent': abs(average_delta_percentage),
            },
        ]
        return Response(context, status=status.HTTP_200_OK)

但对我来说,我不清楚为什么要将GenericAPIView与一个模型和一个序列化程序一起使用,因为您只会将它们用于Create用例,并且在一个显示metrics个订单的端点中创建Order有点奇怪.

Django相关问答推荐

AttributeError:';ManyToOneRel&39;对象没有属性';attname';

RDBMS多对多关系Django

将所有守护用户对象权限从一个Django用户重新分配给另一个Django用户

Django通用列表视图与多查询搜索

在 Django 中重组多对多字段

有什么方法可以自动设置 Debug True Django application

在 django HTML 邮箱模板中使用字体

如何将表单中的用户字段设置为当前登录的用户?

如何在 Django 测试框架中修改会话

Apache + mod_wsgi 与 nginx + gunicorn

如何在 Django 中向 ModelForm 添加外键字段?

CherryPy 与 Django

无效的块标签: static

django 管理列表中的外键显示

在 Celery 任务中运行 Scrapy 蜘蛛

响应发送到客户端后在 Django 中执行代码

如何在该元素中的所有应用程序之间共享元素范围的模板标签

Django/Python初学者:执行python manage.py syncdb时出错-找不到psycopg2

访问 django 管理模板中的对象

如何将类、id、占位符属性添加到 django 模型表单中的字段