保存信号似乎只在第二次保存或之后触发

所以我在post_save上使用一个信号触发函数来创建另一个模型的实例,当第一个模型被保存时:

触发信号的模型:

class Product(models.Model):
    # ...
    colors = models.ManyToManyField(Color)
    sizes = models.ManyToManyField(Size)

而功能:

def create_skus(instance, **kwargs):
    for color in instance.colors.select_related():
        for size in instance.colors.select_related():
            SKU.objects.get_or_create(product=instance, color=color, size=size)

我的问题是每次都应该在post_save上调用create_skus ,但似乎只能在第二次保存或之后进行,导致用户必须两次保存产品。 这是什么来源?

编辑 :我认为这与如何添加这些M2M关系有关( instance.colors.add(<Color object>)但我不确定,如果您知道解决方法,我会永远爱你。


保存产品实例时发送信号,而不是在保存颜色和大小实例时发送。 因此,第一次尝试时,您的post_save()函数的Product实例将不具有Color和Size实例,因为它们不是通过Product model的save()方法保存的。

看看这两个链接:

  • 可能的解决方案由一位同事SO'er发布
  • 您也可以使用m2m_changed信号。
  • 链接地址: http://www.djcxy.com/p/54167.html

    上一篇: save signal seemingly triggered only on 2nd save or after

    下一篇: Why can't I use