Skip to main content
 首页 » 编程设计

python之如何在 Django REST Framework 中将变量从 ModelSerializer.update() 传递到 ModelViewSet.update()

2024年08月20日32sky-heaven

我需要在 View 响应中传递自定义模型更新方法的返回值。

在我的序列化程序中,我想做的是:

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 

现在在我看来,我想在响应中返回 important_info:

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) 

这在 Django REST 中可行还是死路一条?如果是这样,如何以不同的方式做到这一点?

请您参考如下方法:

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)