Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
方法调用上的Django信号(不触发模型实例)_Django_Django Signals - Fatal编程技术网

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

方法调用上的Django信号(不触发模型实例),django,django-signals,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\u red()方法执行。 有什么建议吗项目\u红色不以任何方式更改模型实例 您需要定义一个自定义信号: impo

我们有一个模型:

class Item(model.Model):
    pass

    def items_red(self):
        # filter items by red color
        # model instance is NOT changed (saved)
        pass
我需要捕获带有Django信号的
Item.items\u red()
方法执行。
有什么建议吗<代码>项目\u红色不以任何方式更改模型实例

您需要定义一个自定义信号:

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'))

有关更多信息,请参阅。

您需要定义自定义信号:

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'))

有关更多信息,请参阅。

Thx以了解解释,我不经常使用信号。但现在我知道这有点开销,我只想创建额外的方法,并在
项中触发一个,我认为您不必太担心这种开销,在DB驱动的应用程序中,最大的瓶颈通常是由您的DB性能造成的。不过,代码应该尽可能明确。在经过几个月的代码编写之后,如果您支持您的项目,这会有所帮助。我不经常使用信号。但现在我知道这有点开销,我只想创建额外的方法,并在
项中触发一个,我认为您不必太担心这种开销,在DB驱动的应用程序中,最大的瓶颈通常是由您的DB性能造成的。不过,代码应该尽可能明确。当您在编码两个月后支持您的项目时,它会有所帮助