Reputation: 153
I am new to Django rest framework and tying to update existing data in database. But in place of update a new data is added into database.
serializers.py
class CustomersSerializer(serializers.Serializer):
lname = serializers.CharField(max_length=10)
fname = serializers.CharField(max_length=10)
def create(self, validated_data):
return Customers.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.fname = validated_data.get('fname', instance.fname)
instance.lname = validated_data.get('lname', instance.lname)
instance.save()
return instance
view.py
def UpdateData(request): # Not Working
user = Customers.objects.get(id=1)
serialize = CustomersSerializer(user)
json_data = JSONRenderer().render(serialize.data)
stream = io.BytesIO(json_data)
data = JSONParser().parse(stream)
serializer = CustomersSerializer(data=data)
if serializer.is_valid():
temp_dict = serializer.validated_data
temp_dict['fname'] = "abcd"
serializer.save()
return HttpResponse("Updated..")
If my whole process is wrong someone please suggest me some good resources to understand serializers and django rest framework.
What i have learned is Calling .save() will either create a new instance, or update an existing instance, depending on if an existing instance was passed when instantiating the serializer class.
Upvotes: 0
Views: 1437
Reputation: 125
def UpdateData(request): # Not Working
##payload send in request(fields with value which are changed) in request.data
request_data = request.data
payload = {
'fname' : 'test',
'lname' : 'user'
}
user = Customers.objects.get(id=1)
serialize = CustomersSerializer(user,payload,partial=True)
##specify renderers/decoders settings in settings.py/config.py
if serializer.is_valid():
##don't know why you need this.
temp_dict = serializer.validated_data
temp_dict['fname'] = "abcd"
###
serializer.save()
return HttpResponse("Updated..")
return HttpResponse('error in update {}'.format(serializer.errors))
See the change in serializer, first retrieve the object to be updated which is user followed by dictionary containing the fields and value to update and partial=True specifying partial update.
For Saving new object directly pass the payload in serializer followed by .save()
serializer = CustomersSerializer(data=payload)
if serializer.is_valid():
serializer.save()
For PUT operation send the complete updated data of Customer
customer = Customer.objects.get(id=1)
serializer = CustomersSerializer(customer,data=payload)
if serializer.is_valid():
serializer.save()
Upvotes: 2