TonyMontana
TonyMontana

Reputation: 261

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

so heres my serializer class:


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

and my view :

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

Let a model object has fields name and secret_identity. and i want to update its name only but the line

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

doesnt allow me to update only , one field . how to update only one field?

Upvotes: 0

Views: 3237

Answers (2)

Ameya Joshi
Ameya Joshi

Reputation: 404

you have to add partial=True attribute to serializer object. i.e. use this

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

Upvotes: 4

Hafnernuss
Hafnernuss

Reputation: 2847

By overriding the serializers update method:

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

Don't forget to save your model inside the update method, or the changes wont be persistent in the database. If you need more information, this is described in the DRF docs.

Upvotes: 0

Related Questions