Reputation: 1639
I need to pass a return value of a custom model update method in the view response.
In my serializer I want to do:
class Serializer(ModelSerializer):
def update(self, instance, validated_data):
something_special = validated_data.pop('something_special')
important_info = model.update_something_special(something_special)
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.save()
return instance
And now in my view I'd like to return important_info
in the response:
class View(ModelViewSet):
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
important_info = ???
return Response(serializer.data)
Is this possible in Django REST or is this a dead end? If so, how to do this differently?
Upvotes: 3
Views: 1615
Reputation: 7717
class Serializer(ModelSerializer):
important_info = None
def update(self, instance, validated_data):
something_special = validated_data.pop('something_special')
self.important_info = model.update_something_special(something_special)
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.save()
return instance
class View(ModelViewSet):
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
important_info = serializer.important_info
return Response(serializer.data)
Upvotes: 6