2011-04-14 31 views
3

我想保存一個對象,以便保存M2M。然後,我想讀出M2M字段來進行一些計算並在保存的對象上設置一個字段。在save()中獲取新創建對象的ID

class Item(models.Model): 
    name = models.CharField(max_length=20, unique=True) 
    product = models.ManyToManyField(SomeOtherModel, through='SomeTable') 

    def save(self, *args, **kwargs): 
     super(Item, self).save(*args, **kwargs) 
     m2m_items = SomeTable.objects.filter(item = self) 
     # DO SOME STUFF WITH THE M2M ITEMS 

m2m_items不會打開,。有什麼辦法可以解決這些問題嗎?

回答

4

這裏有些困惑。

一旦您呼叫superself.id將會有一個值。

但是,我不明白你的filter調用點。首先,您可能意思是get而不是filter,因爲過濾器獲取查詢集而不是單個實例。但即便如此,這個通話毫無意義:你只需要就可以保存,所以無論你從數據庫中得到什麼,都會完全一樣。重點是什麼?

問題更新後編輯好的,謝謝您的澄清。但是,該模型的save()方法不對M2M項目做任何事情負責。他們需要分開保存,這是表單或視圖的工作。

+0

對不起,我把信息寫錯了。我重寫了我的問題。我所做的是我嘗試獲得許多許多物品。但由於某種原因,他們不會出現 – Stephan 2011-04-14 20:01:36

+0

謝謝你的回答。我試圖現在使用m2m_changed信號。 models.signals.m2m_changed.connect(set_total_price,sender = Deal.product.through)由於某種原因,它不會調用我的set_total_price方法。它適用於post_save信號......嗯,我有一些事情要重試。非常感謝。 – Stephan 2011-04-14 21:47:45

+0

進一步閱讀:我最終通過遍歷實例讀取了save_formset中的M2M。然後我調用保存的項目並用新值保存。 – Stephan 2011-04-15 12:14:39

相關問題