Django post_save信号似乎仅在第二次保存或之后触发

时间:2011-05-04 18:58:25

标签: django django-signals

所以我在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>),但我不确定,如果你知道一种解决方法,我'永远爱你。

1 个答案:

答案 0 :(得分:2)

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

查看以下两个链接: