gpt4 book ai didi

python - Django Rest Framework - 如何使用 update_or_create

转载 作者:行者123 更新时间:2023-11-30 22:45:38 27 4
gpt4 key购买 nike

我正在使用 Django Rest 框架。如果记录不存在,我想创建它;如果存在,我想更新它。

我做了什么:

class MyModelList(generics.ListCreateAPIView):
queryset = MyModel.objects.all()
serializer_class = MyModeSerializer
permission_classes = (permissions.IsAuthenticated,)

def perform_create(self, serializer):
my_model, created = MyModel.objects.update_or_create(user_id=self.request.data['user_id'],
defaults={
'reg_id': self.request.data['reg_id']
})

记录已创建或更新,但我收到错误'OrderedDict'对象没有属性'pk'。如何使用update_or_create

最佳答案

首先,这是一个坏主意,因为您破坏了 REST API 架构风格,该风格需要通过 POST 创建并通过 PUT 和 PATCH 更新。

但是假设您有充分的理由这样做,perform_create 应该在创建后调用,以添加在添加模型实例时需要执行的其他操作。更相关的事情是重写 create 方法以在必要时更新对象。

我会这样做。

class MyModelList(generics.ListCreateAPIView):
queryset = MyModel.objects.all()
serializer_class = MyModeSerializer
permission_classes = (permissions.IsAuthenticated,)

def create(self, request, *args, **kwargs):
mymodel=None
id=request.data.get("id")
if id:
mymodel=self.get_object(id)

if mymodel:
return self.update(request, *args, **kwargs)
else:
return self.create(request, *args, **kwargs)

关于python - Django Rest Framework - 如何使用 update_or_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41147607/

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