我想自动更新一个关于模型变更的外部应用程序。问题是,数据在用户事件之间有很多种关系。我试图使用"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
问题是,如果我做了一个更改,删除一个用户并添加另一个用户,那么这个代码将被调用两次!这不好,我不能只忽略一种类型的操作,以防只调用该操作。我曾想过将实例推到堆栈中而忽略重复项,但这看起来很混乱。有没有办法让我自己发出只发射一次的信号?在
Django
m2m_changed
表示多个模型的变化。如果有4个动作因此,如果您只是添加一个用户,这个m2mu更改的方法将被触发2次,分别为}。在
pre_add
和{您可以指定要调用API的操作。这可以通过以下方式实现:
引用Django文档:https://docs.djangoproject.com/en/2.2/ref/signals/#m2m-changed
没有接力似乎是这个问题的一个很好的答案,所以这里有一些有用的解决办法,比我在第一步的想象中更好。在
解决方案1:
不是组合信号,而是将实例的主键添加到集合中以忽略重复的信号:
虽然这需要某种计划任务来运行send_updates(),但如果对事件有许多连续的更改,则可以避免垃圾邮件的机会。在
解决方案2
忽略所有信号将最后修改的信号添加到模型中。然后运行查询以获取从现在到最后调用send_updates()之间的所有事件。将上次调用的内容存储到磁盘/数据库中,以避免在重新启动时重新发送所有内容。在
相关问题 更多 >
编程相关推荐