【问题标题】:MemoryError in django-rest-framework CreateAPIView due to unnecessary queries由于不必要的查询,django-rest-framework CreateAPIView 中的 MemoryError
【发布时间】:2023-03-22 11:18:01
【问题描述】:

我想使用 django-rest-framework 中的 CreateAPIView 创建一个对象。调用视图时,我得到一个MemoryError。这可能是因为视图试图在可浏览响应中呈现所有 350000 个现有对象。

我应该如何阻止视图执行相应的查询?定义 postget_queryset 方法没有帮助。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    我通过使用APIView 而不是CreateAPIView 解决了这个问题。这是我写的课程:

    class VoteCreateAPIView(views.APIView):
        def post(self, request, *args, **kwargs):
            vote = request.POST.get('vote', '')
            # here some validation
            Vote.objects.create(
                user=request.user,
                vote=vote)
            return response.Response({'vote': vote}, status=status.HTTP_200_OK)
    

    如果有更好的方法,我仍然会很好奇。

    【讨论】:

    • 您是否找到了正确的方法来执行此操作,或者最终为什么会发生这种情况?我是否理解正确,在这里您基本上是从更通用的APIView 继承,然后手动实现自己的帖子?
    • 是的。我完全按照你说的做了。最后很简单。问题的原因是CreateAPIView 默认情况下会创建一个响应,如果您有很多对象,该响应会很大。另一种解决方案是从CreateAPIView 继承并修改响应和查询。
    猜你喜欢
    • 2016-06-17
    • 2019-07-03
    • 1970-01-01
    • 2021-03-17
    • 2022-11-13
    • 2018-10-26
    • 2019-10-19
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多