【发布时间】:2016-03-22 23:47:26
【问题描述】:
我想自动更新有关模型更改的外部应用程序。问题是数据在事件 用户之间存在多对多关系。我尝试使用"m2m_changed" signal。
@receiver(m2m_changed, sender=models.Event.organisers.through)
def event_changed(sender, instance, action, *args, **kwargs):
if "post" in action:
# hey api here is the new list of organisers of this
这样做的问题是,如果我在删除一个用户并添加另一个用户的地方进行一次更改,那么这段代码会被调用两次!这不好,我不能只忽略一种类型的操作,以防仅调用该操作。我曾想过将实例推送到堆栈并忽略重复,但这似乎很混乱。有没有办法让我自己的信号只触发一次?
【问题讨论】:
-
你不能让你的代码具有幂等性,这样调用两次就不会造成伤害吗?
-
@LorenzoPeña 那么确保有变化的唯一方法就是询问上述 api。将 api 用于应该是内部功能的东西肯定会增加一些代码债务。如果你有一个聪明的方法,我怎么可以让它被调用两次而不发送 2 个帖子,我全神贯注 :)
-
尝试
dispatch_uid方法,如docs.djangoproject.com/en/1.9/topics/signals/…中所述 -
@LorenzoPeña 我试过了,但这似乎只有在您的信号连接器运行多次时才能解决问题。
-
你能负担得起 Django 1.9,其中有一个相关的方法
set()可以合二为一吗?
标签: python django django-models django-signals