0

我遇到了post_save两次被调用的问题,我花了很多时间来弄清楚前面提到的导入。我确认导入只发生一次,不存在多次注册的问题。此外,我dispatch_uid在信号注册中使用了一个唯一的,根据文档应该已经解决了这个问题。它没有。我更仔细地看了看,发现信号处理程序在 .create() 和 .save() 上都被调用了。为什么要创建?

我可以让它工作的唯一方法是依靠下面我的信号处理程序中的hack

created = False

    #Workaround to signal being emitted twice on create and save
    if 'created' in kwargs:
        if kwargs['created']:
            created=True

    #If signal is from object creation, return
    if created:
        return

这是对尽管 uid 被调用两次的 Django post save signal的后续问题

4

1 回答 1

1

因为“创造”是实例化加保存。

create(**kwargs)

一种创建对象并将其全部保存的便捷方法。因此:

p = Person.objects.create(first_name="Bruce", last_name="Springsteen")

和:

p = Person(first_name="Bruce", last_name="Springsteen")
p.save(force_insert=True)

是等价的。

于 2012-08-19T19:28:51.310 回答