- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个模型“评论”和一个在评论被删除时采取行动的信号。该信号在管理中删除评论时执行,但通过 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
与其他删除操作的唯一区别是我重写了 View 集的“销毁”方法:
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)
最佳答案
如果 sender 参数与您期望的模型不匹配,则不会触发 post_delete 和 pre_delete。
要检查发送者,创建一个没有发送者参数的接收者:
@receiver(post_delete)
def comment_post_delete(sender, instance, *args, **kwargs):
if sender == Comment:
# do something
如果保存的模型是“评论”,为什么信号会被发送到不同的模型?
这可能发生在 django 自动设置延迟模型时,所以当我期待“评论”时,我得到了类似“Comment_deferred_somefield”的东西。
例如,当查询使用 Model.objects.only('field1', 'field2', 'etc')
并且 中缺少一些字段时,可能会发生 Django 自动延迟>only()
方法
关于django - post_delete/pre_delete 信号未针对特定发件人触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35006328/
我想在删除 File 实例时从存储中删除文件。尝试使用 django 信号。这是我的模型文件: class File(models.Model): orig_name = models.Cha
我有一个模型“评论”和一个在评论被删除时采取行动的信号。该信号在管理中删除评论时执行,但通过 django-rest-framework 删除时不执行。 @receiver(post_delete,
这是在模型文档的 pre_delete 上运行的。当按照建议的最佳实践将此代码放在单独的文件 (signals.py) 中时,它会被皇家忽略。当放入模型文件时,它工作正常。 from django.d
是否可以在连接到 pre_delete 信号的回调中获取登录的 django 用户(调用模型的删除方法)? 最佳答案 pre_delete 信号不会传递请求实例,但您可以添加一个装饰器来添加它,并在
我正在使用信号在对象被删除后执行操作;但是,有时我想根据参数执行不同 操作(不是默认操作)。 有没有办法将参数传递给我的信号捕捉器?或者我是否必须放弃信号,而是硬编码我想在模型中执行的操作? 我想做的
在我的应用程序中,我想跟踪所有被删除的问题。所以我在我的模型文件中创建了一个类(表)。 class Deleted(models.Model): question = models.IntegerFi
我是一名优秀的程序员,十分优秀!