gpt4 book ai didi

python - DRF更新一行

转载 作者:行者123 更新时间:2023-12-01 09:26:08 28 4
gpt4 key购买 nike

我试图更新客户端数据库中的现有行,我使用 put 方法向服务器发送请求,我使用 updatemodelmixin 也通过此 View 服务器响应将 id 发送到数据中的服务器

超出最大递归深度

更新数据的正确方法是什么?

class ProductOwnserSingleViewAPIView(APIView,mixins.UpdateModelMixin):

queryset = Product.objects.all()
serializer_class = ProductSerializer

def put(self, request, *args, **kwargs):
return self.put(self,request,*kwargs,**kwargs)

def get(self, request):
id = request.GET.get("id")
try:
product = Product.objects.get(
author_id=request.user.id,
product_id=id
)
if not product:
return Response(status.HTTP_400_BAD_REQUEST)
serializer = ProductSerializer(instance=product, context={"request": request})
return Response(serializer.data)
except Product.DoesNotExist:
return Response(status.HTTP_400_BAD_REQUEST)

最佳答案

你写:

class ProductOwnserSingleViewAPIView(APIView,mixins.UpdateModelMixin):

# ...

<b>def put(self, request, *args, **kwargs):
return self.put(self,request,*kwargs,**kwargs)</b>

如果您执行 PUT 请求,则意味着将使用一些参数调用 put(..) 函数。但是您的 put 函数是做什么的呢?事实上,它使用完全相同的参数调用自身。此调用随后会导致另一个调用,因此您将继续调用,直到调用堆栈达到其最大值,并且会发生错误。

put(..) 的典型工作流程是:

class ProductOwnserSingleViewAPIView(APIView,mixins.UpdateModelMixin):

# ...

def put(self, request, pk, format=None):
# obtain the element we want to "update"
product = Product.objects.get(
author_id=request.user.id,
product_id=request.GET('id')
)

# pass the element through the serializer with the data to update
serializer = ProductSerializer(product, data=request.data)
# check if the update makes sense (is valid)
if serializer.is_valid():
# if so, we save the object
serializer.save()
# and return the data as a response
return Response(serializer.data)
# if not, we report the errors as a response
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

因此,我们首先获取我们想要PUT的元素,然后我们调用序列化器来更新我们想要更改的字段(数据位于request.data中) >),最后,如果所有这些字段都有效,我们保存对象并返回对象的所有数据。

如果序列化器报告错误,我们将返回这些错误结果。

关于python - DRF更新一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50379441/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com