如何使用django Serializer来更新实例



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

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

在请求中。data,我只是想传递一些SV的变量。但是由于缺少一些字段,is_vaild将为false。我想要的是,只需更新请求中的字段。对于其他的数据,保持值为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)

相关内容

  • 没有找到相关文章

最新更新