Reputation: 261
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
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
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