在 django rest 框架中执行 serializer.save() 时如何更新模型对象的只有一个字段数据?

how to update model object's , only one field data when doing serializer.save() in django rest framework?

所以这是我的序列化器 class:


class HeroSerializer(serializers.ModelSerializer):
    class Meta:
        model=Hero
        fields=['id','name','secret_identity']

我的观点:

@api_view(['PUT', ])
def api_hero_update(request, name):
    try:
        character = Hero.objects.get(name=name)
    except:
        return Response(status=status.HTTP_404_NOT_FOUND)
    serializer = serializers.HeroSerializer(character, data=request.data)
    message={}
    if serializer.is_valid():
        serializer.save()
        print(serializer.data)
        message["success"]="Update Successful"
        return Response(data=message)
    return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

让模型对象具有字段名称和secret_identity。我只想更新它的名称,但行

serializer = serializers.HeroSerializer(character, data=request.data)

不允许我只更新一个字段。如何只更新一个字段?

通过覆盖序列化程序 update 方法:

class HeroSerializer(serializers.ModelSerializer):
    class Meta:
        model=Hero
        fields=['id','name','secret_identity']


    def update(self, instance, validated_data):
        instance.secret_identity = validated_data.get('your field name', 'defaultvalue')
        instance.save()
        return instance

不要忘记在 update 方法中保存您的模型,否则更改将不会持久保存在数据库中。如果您需要更多信息,请参阅 DRF docs.

您必须将 partial=True 属性添加到序列化程序对象。即使用这个

serializer = serializers.HeroSerializer(character, data=request.data, partial=True)