【问题标题】:Django post_save signal seemingly triggered only on 2nd save or afterDjango post_save 信号似乎仅在第二次保存或之后触发
【发布时间】:2011-08-18 19:29:33
【问题描述】:

所以我在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)

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

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

【问题讨论】:

    标签: django django-signals


    【解决方案1】:

    在保存 Product 实例时发送信号,而不是在保存 Color 和 Size 实例时发送。因此,在第一次尝试时,您的 post_save() 函数的 Product 实例将(还)没有 Color 和 Size 实例,因为它们不是通过 Product 模型的 save() 方法保存的。

    查看这两个链接:

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 2012-01-29
      • 2018-08-09
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      相关资源
      最近更新 更多