【发布时间】:2023-03-22 11:18:01
【问题描述】:
我想使用 django-rest-framework 中的 CreateAPIView 创建一个对象。调用视图时,我得到一个MemoryError。这可能是因为视图试图在可浏览响应中呈现所有 350000 个现有对象。
我应该如何阻止视图执行相应的查询?定义 post 或 get_queryset 方法没有帮助。
【问题讨论】:
标签: django django-rest-framework
我想使用 django-rest-framework 中的 CreateAPIView 创建一个对象。调用视图时,我得到一个MemoryError。这可能是因为视图试图在可浏览响应中呈现所有 350000 个现有对象。
我应该如何阻止视图执行相应的查询?定义 post 或 get_queryset 方法没有帮助。
【问题讨论】:
标签: django django-rest-framework
我通过使用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 继承并修改响应和查询。