2012-09-25 271 views
0

我遇到了雞和雞蛋的情況。 我有一個formset用戶可以修改現有的數據。實例不應該直接保存,而應該添加爲新對象。創建對象並設置m2m關係

for fm in attached_deals_formset:     
    if fm.has_changed(): 
     modified_deal = fm.save(commit=False) 
     deal = Deal.objects.create(deal_id = modified_deal.deal_id, ...) 
     for item in modified_deal.sales_item: #m2m 
      deal.sales_item.add(item) 
     deal.save_m2m(); 

我的問題是sales_item這是一個m2m字段。僅僅通過遍歷它崩潰:

for item in modified_deal.sales_item: 

「交易」實例都需要有前 許多一對多關係的主鍵值都可以使用。

雖然我不明白,這些是用戶在modified_deal中選擇的多選項,爲什麼只是通過遍歷它來拋出異常呢?我怎麼能解決這個問題?

回答

0

我找到了解決方案。 modified_deal = fm.save(commit=False)只包含類的值。 m2m字段指向單獨的表,因此尚未設置。

爲了獲得訪問用戶的M2M選擇,只需使用該字段爲模型的form.cleaned_data[]相當部分的一部分:

modified_deal = fm.save(commit=False) 
    deal = Deal.objects.create(deal_id = modified_deal.deal_id, ...) 
    for item in fm.cleaned_data['sales_item']: 
     deal.sales_item.add(item) 
    deal.save(); 

這對我的作品。