python - 如何使用 django Serializer 更新实例

标签 python django serialization request updates

在 Django PUT 方法中,我想更新一个实例:

sv= SV.objects.get(pk=pk)
serializer = SVSerializer(sv, data=request.data)
if serializer.is_valid():

这里,在request.data中,我只是想传递一些SV的变量。 但由于缺少某些字段,is_vaild 将是错误的。 我想要的是,只需更新 request.data 中的字段,对于其他字段,将值保留在 sv 中。 我怎么能那样做?

最佳答案

通过设置 partial=True 执行部分更新:

sv= SV.objects.get(pk=pk)
serializer = SVSerializer(sv, data=request.data, partial=True)
if serializer.is_valid():
    serializer.save()
else:
    # Do something else

这允许 PATCH 请求。

编辑

如果您想要在部分更新期间使用默认字段(如评论中所要求的那样),请覆盖 update 方法:

SVSerializer(serializers.ModelSerializer): # Instead of exposing the 
    state_flag = serializers.SlugRelatedField(source='sv_state', queryset=SVState.objects.all(), slug_field='flag')
    
    def update(self, instance, validated_data):
        if self.partial and validated_data.get('state_flag') == None:
            validated_data['state_flag'] = 0
        super().update(instance=instance, validated_data=validated_data)
                

关于python - 如何使用 django Serializer 更新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69071531/

相关文章:

java - 使用类型信息优雅地忽略 Jackson JSON 反序列化中的未知类?

python - numpy.array 访问

python - Django 指向错误版本的 Postgres

python - 如何在 python 中进行 FQL 查询?

python - 使用命令行时出现 App Engine 问题

python - 如何使用 Django 通过链接呈现与一个条目关联的所有数据?

c# - 在没有 Json.Net 的情况下反序列化 Json 字符串(在 C# 中)

c# - 如何使用具有不可变值类型的 protobuf-net?

python - pandas read_gbq 返回 httplib.ResponseNotReady

python - 如何对 mongodb 进行不区分大小写的正则表达式搜索?