我有一个Django项目,它获取一些用户数据并将其存储在数据库中.
我希望我的函数用相同的方法处理Create
和Update
,所以我创建了一个从UpdateAPIView
继承的视图
class UserList(generics.UpdateAPIView):
queryset = RawUser.objects.all()
serializer_class = RawUserSerializer
def put(self, request, *args, **kwargs):
raw_user_serializer: RawUserSerializer = self.get_serializer(data=request.data)
raw_user_serializer.is_valid(raise_exception=True) # Fail when user already exists
raw_user: RawUser = RawUser(**raw_user_serializer.validated_data)
// Some custom computing
# Create or update raw_user
self.perform_update(raw_user_serializer)
return JsonResponse({'user_id':raw_user.id}, status = 201)
class UserDetail(generics.RetrieveAPIView):
queryset = RawUser.objects.all()
serializer_class = RawUserSerializer
我认为UpdateAPIView
的使用和perform_update()
的功能都很好.当用户尚不存在时,它可以很好地工作,但当我try 使用相同的主键创建新用户时,我得到:Bad Request: /api/profiling/users/
,响应如下:
{
"id": [
"raw user with this id already exists."
]
}
它看起来像raw_user_serializer.is_valid(raise_exception=True)
指令失败.如何解决我的问题?(同时保持我的对象的验证)