方法调用上的Django Signal(不触发模型实例)

时间:2016-07-24 11:01:35

标签: django django-signals

我们有一个模特:

class Item(model.Model):
    pass

    def items_red(self):
        # filter items by red color
        # model instance is NOT changed (saved)
        pass

我需要用Django信号捕获Item.items_red()方法执行。 有什么建议怎么做? items_red不以任何方式更改模型实例。

1 个答案:

答案 0 :(得分:3)

您需要定义自定义信号:

import django.dispatch

items_red_executed = django.dispatch.Signal()

class Item(model.Model):
    pass

    def items_red(self):
        # filter items by red color
        # model instance is NOT changed (saved)
        items_red_executed.send(sender=self.__class__)

然后是接收者:

from django.dispatch.dispatcher import receiver

@receiver(items_red_executed, sender=Item)
def my_receiver(**kwargs):
    print(kwargs.get('sender'))

有关更多信息,请参阅documentation