Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass a variable from ModelSerializer.update() to ModelViewSet.update() in Django REST Framework

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?

like image 548
Dave Avatar asked Nov 30 '25 01:11

Dave


1 Answers

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)
like image 134
Ykh Avatar answered Dec 01 '25 13:12

Ykh



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!