【发布时间】:2016-05-02 13:44:41
【问题描述】:
我有一个模型“评论”和一个在评论被删除时采取行动的信号。 该信号在管理员删除评论时执行,但在通过 django-rest-framework 删除时不执行。
@receiver(post_delete, sender=Comment, dispatch_uid=str(uuid.uuid1())) # I tried also removing dispatch_uid
def comment_post_delete(sender, instance, *args, **kwargs):
我不确定这是否与 django-rest-framework 相关,但这就是我的应用程序的工作方式。 需要注意的另一件事是,许多其他信号都可以正常工作。
所有信号都在一个单独的文件 signals.py 中声明,我在 models.py 的末尾用一个简单的import signals 导入它
与其他删除操作的唯一区别是我重写了视图集的“销毁”方法:
class CommentViewSet(mixins.CreateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
serializer_class = CommentSerializer
def destroy(self, request, *args, **kwargs):
# only the comment author or the media owner are allowed to delete
instance = self.get_object()
if request.user != instance.user and request.user != instance.media.owner:
error = {'detail': 'No tienes permiso para borrar este comentario'}
return Response(data=error, status=status.HTTP_403_FORBIDDEN)
return super(CommentViewSet, self).destroy(request, args, kwargs)
【问题讨论】:
标签: django django-rest-framework django-signals