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

Django post_保存信号似乎仅在第二次保存或之后触发,django,django-signals,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.c

因此,在保存第一个模型时,我正在使用
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\u sku
,但似乎只在第二次保存或之后才起作用,导致用户必须保存一个产品两次。这是怎么回事


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

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

查看以下两个链接:

  • 您也可以使用