擅长:python、mysql、java
<p>没有接力似乎是这个问题的一个很好的答案,所以这里有一些有用的解决办法,比我在第一步的想象中更好。在</p>
<h2>解决方案1:</h2>
<p>不是组合信号,而是将实例的主键添加到集合中以忽略重复的信号:</p>
<pre><code>updated = set()
@receiver(m2m_changed, sender=models.Event.organisers.through)
def event_changed(sender, instance, action, *args, **kwargs):
if "post" in action:
updated.add(instance.pk)
def send_updates():
for Event in updated: # Iteration AKA for each element
#update code here
</code></pre>
<p>虽然这需要某种计划任务来运行send_updates(),但如果对事件有许多连续的更改,则可以避免垃圾邮件的机会。在</p>
<h2>解决方案2</h2>
<p>忽略所有信号将最后修改的信号添加到模型中。然后运行查询以获取从现在到最后调用send_updates()之间的所有事件。将上次调用的内容存储到磁盘/数据库中,以避免在重新启动时重新发送所有内容。在</p>