【问题标题】:Django signals dispatch_uidDjango 信号 dispatch_uid
【发布时间】:2018-06-15 18:21:48
【问题描述】:

我有一个关于 dispatch_uid 用于信号的问题。

目前,我通过简单地添加if not instance.order_reference 来防止信号的多次使用。我现在想知道dispatch_uid 是否具有相同的功能,我可以删除 "if not" 子句。

signals.py

def reserveditem_create_order_reference(sender, instance, **kwargs):
    if not instance.order_reference:
        instance.order_reference = unique_order_reference_generator()

app.py

class OrdersConfig(AppConfig):
    name = 'orders'

    def ready(self):

        #Pre save signal for ReservedItem model
        reserved_model = self.get_model('ReservedItem')
        pre_save.connect(
            reserveditem_create_order_reference,
            sender=reserved_model,
            dispatch_uid="my_unique_identifier"
        )

【问题讨论】:

    标签: django django-signals


    【解决方案1】:

    the docs

    在某些情况下,将接收器连接到信号的代码可能会运行多次。这可能会导致您的接收器函数被多次注册,从而为单个信号事件多次调用。如果这种行为有问题(例如在保存模型时使用信号发送电子邮件时),请传递一个唯一标识符作为 dispatch_uid 参数来标识您的接收器函数

    所以是的,删除 if 子句并设置一个唯一的信号接收器 dispatch_uid 将阻止您的处理程序被连接(并随后被调用)多次。

    【讨论】:

      猜你喜欢
      • 2018-03-05
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2022-06-20
      • 2015-09-25
      • 1970-01-01
      相关资源
      最近更新 更多