我有一个Django项目,它获取一些用户数据并将其存储在数据库中. 我希望我的函数用相同的方法处理CreateUpdate,所以我创建了一个从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)指令失败.如何解决我的问题?(同时保持我的对象的验证)

推荐答案

序列化程序认为您想要create个新对象.您应该传递要(完全)更新的实例:

class UserList(generics.UpdateAPIView):
    queryset = RawUser.objects.all()
    serializer_class = RawUserSerializer

    def put(self, request, *args, **kwargs):
        instance = self.get_object()
        raw_user_serializer: RawUserSerializer = self.get_serializer(
            instance, data=request.data, partial=False
        )
        raw_user_serializer.is_valid(
            raise_exception=True
        )  # Fail when user already exists
        raw_user = raw_user_serializer.update(self.instance, validated_data)

        # some computing…

        self.perform_update(raw_user_serializer)

        return JsonResponse({'user_id': raw_user.id}, status=201)

Python相关问答推荐

保留包含pandas pandras中文本的列

单击Python中的复选框后抓取数据

使用Python和PRNG(不是梅森龙卷风)有效地生成伪随机浮点数在[0,1)中均匀?

如何将带有逗号分隔的数字的字符串解析为int Array?

如何将Matplotlib的fig.add_axes本地坐标与我的坐标关联起来?

DuckDB将蜂巢分区插入拼花文件

LAB中的增强数组

我从带有langchain的mongoDB中的vector serch获得一个空数组

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

如何检测背景有噪的图像中的正方形

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

加速Python循环

ThreadPoolExecutor和单个线程的超时

Pandas—在数据透视表中占总数的百分比

创建可序列化数据模型的最佳方法

使用BeautifulSoup抓取所有链接

使用Openpyxl从Excel中的折线图更改图表样式

比Pandas 更好的 Select

使用类型提示进行类型转换

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';