gpt4 book ai didi

python - 编辑 many_to_many 字段时避免 Django 中的重复信号

转载 作者:行者123 更新时间:2023-11-28 16:28:41 25 4
gpt4 key购买 nike

我想自动更新有关模型更改的外部应用程序。问题是数据在事件 <-> 用户之间处于多对多关系。我尝试使用 "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个 Action

  1. pre_add
  2. post_add
  3. pre_remove
  4. post_remove

因此,如果您只是添加一个用户,这个 m2m_changed 方法将被触发 2 次,分别用于 pre_addpost_add

您可以指定要调用 API 的操作。这可以这样做:

    @receiver(m2m_changed, sender=models.Event.organisers.through)
def event_changed(sender, instance, action, *args, **kwargs):
if kwargs.get('action') == 'pre_add': # Or whatever action you want
# Call your API here

引用 Django 文档:https://docs.djangoproject.com/en/2.2/ref/signals/#m2m-changed

关于python - 编辑 many_to_many 字段时避免 Django 中的重复信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34318831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com