如何解决Viewset/Serializer 上的 DRF PUT 不会在模型实例上触发 post_save 信号
我有以下 DRF 视图:
class MyViewSet(RetrieveModelMixin,ListModelMixin,UpdateModelMixin,GenericViewSet,CreateModelMixin,DestroyModelMixin):
serializer_class = MySerializer
queryset = My.objects.all()
lookup_field = "uuid"
以下序列化程序:
class MySerializer(serializers.ModelSerializer):
class Meta:
model = My
fields = [
'uuid','name'
]
我在应用程序的 signal.py 中存储了一个信号
@receiver(post_save,sender=My)
def my_updated(sender,instance,created,**kwargs):
if not created:
print('MySignal Fired')
信号在apps.py中导入。 当我打开终端并在实例上运行 .save() 方法时,信号正在工作。
该应用程序也在 django 配置中声明。 有什么想法吗?
顺便说一句。在 API 上执行 .PUT 时,它会将所有内容很好地保存在数据库中。所以api正在做它的工作。不知道为什么信号没有触发。
解决方法
post_save
不适用于放置和补丁请求..
挂钩通用视图的新函数是:
perform_create(self,serializer) - Called by CreateModelMixin when saving a new object instance.
perform_update(self,serializer) - Called by UpdateModelMixin when saving an existing object instance.
perform_destroy(self,instance) - Called by DestroyModelMixin when deleting an object instance.
查看文档:{{3}}
def perform_create(self,serializer):
serializer.save(user=self.request.user)
def perform_update(self,serializer):
instance = serializer.save()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。