min*_*ang 7 python django serialization request updates
在 Django PUT 方法中,我想更新一个实例:
sv= SV.objects.get(pk=pk)
serializer = SVSerializer(sv, data=request.data)
if serializer.is_valid():
Run Code Online (Sandbox Code Playgroud)
这里,在request.data中,我只想传递SV的一些变量。但由于缺少某些字段,is_vaild 将为 false。我想要的是,只更新 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
Run Code Online (Sandbox Code Playgroud)
这允许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)
Run Code Online (Sandbox Code Playgroud)