2011-05-04 63 views
1

所以我使用的信号触发功能上post_save后,当第一个被保存到创建另一个模型的实例:Django的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被调用,但似乎只禾rk在第二次保存或之后,导致用户必须两次保存产品。这是什么来源?

编辑:我觉得这事做这些M2M关系如何添加(即instance.colors.add(<Color object>),但我不知道,如果你知道一种解决办法,我会永远爱你

回答

2

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

查看这两个链接: