2011-05-04 28 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()方法保存。

查看這兩個鏈接: