如何使用 django Serializer 更新实例

how to use django Serializer to update an instance

在 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)