2017-09-25 39 views
0

我有一個非常大的模型,具有步驟形式。所以我決定在每個頁面上獲取前一個對象並在窗體中更新其屬性。在我的第一種形式:與commit = False保存的對象,仍然保存

def save(self, commit=False): 
     obj = super(FirstForm, self).save(commit=False) 
     obj.id = 999999999 
     self.request.session['obj'] = pickle.dumps(obj) 
     self.request.session.save() 
     return obj 

id是必需的mtm。所以我設置了默認的一個。

然後在視圖中的最後一步我做的:

obj = self.request.session.get('obj') 
obj = pickle.loads(obj) 
obj.id = None # remove temporary id 
obj.save() 

但Django的保存兩個對象。一個普通對象和一個空ID爲999999999的對象。爲什麼?

我試着這樣做:

obj = super(FirstForm, self).save(commit=False) 

obj.id = 999999999 
self.request.session['obj'] = pickle.dumps(obj) 
self.request.session.save() 
obj.delete() 

但它並沒有幫助。

回答

2

這可能是因爲id字段被用作模型的主鍵。當您將id設置爲None,然後保存該對象時,它實際上會創建一個新對象,並且該對象具有從前一個對象開始依次迭代的ID。

+0

你有什麼解決方法,該如何避免? – Arti