Reputation: 2783
If I run my code at the first time, it works successfully. Data are stored in the database and the http code is 200. If I change some data on the client side and try to save the model again, I reach the following error.
I read on the django doc, hat i can use Save as "create" and "update" as well.
error message
heating mapping with this zone already exists
views.py
from heatingControll.models import HeatingMapping as HeatingMappingModel
# ... some code ...
@detail_route(methods="post")
def save(self, request):
zone = request.data.get('zone')
data = json.loads(zone)
serializer = HeatingMappingSerializer(data=data)
valid = serializer.is_valid(raise_exception=True)
if(valid):
result = serializer.save()
self.response = {"result": True, "data":HeatingMappingSerializer(result).data, "message": "Erfolgreich gespeichert"}
return JsonResponse(self.response, safe=False)
SOLUTION supported by zaidfazil
@detail_route(methods="post") def save(self, request): zone = request.data.get('zone') data = json.loads(zone)
if 'zone' in data:
obj = HeatingMappingModel.objects.get(id=data.get('id'))
serializer = HeatingMappingSerializer(data=data, instance=obj)
else:
serializer = HeatingMappingSerializer(data=data)
valid = serializer.is_valid(raise_exception=True)
if(valid):
result = serializer.save()
self.response = {"result": True, "data":HeatingMappingSerializer(result).data, "message": "Erfolgreich gespeichert"}
return JsonResponse(self.response, safe=False)
Upvotes: 0
Views: 1333
Reputation: 9235
Try editing your view maybe like this,
@detail_route(methods="post")
def save(self, request, pk):
zone = request.data.get('zone')
data = json.loads(zone)
obj = HeatingMapping.objects.get(pk=pk)
serializer = HeatingMappingSerializer(data=data, instance=obj)
valid = serializer.is_valid(raise_exception=True)
if(valid):
result = serializer.save()
self.response = {"result": True, "data":HeatingMappingSerializer(result).data, "message": "Erfolgreich gespeichert"}
return JsonResponse(self.response, safe=False)
Upvotes: 0