2017-09-25 17 views
0

私は非常に大きなモデルを持っています。だから私は各ページを前のオブジェクトを取得し、彼の属性をフォームで更新することを決めました。最初のフォームで私は:コミット= 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は2つのオブジェクトを保存します。 1つの通常のオブジェクトと1つは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フィールドがモデルの主キーとして使用されるためです。 idNoneに設定してオブジェクトを保存すると、実際には前の最後のオブジェクトから順番に反復されるIDを持つ新しいオブジェクトが作成されます。

+0

解決策はありますか?これを避ける方法はありますか? – Arti

関連する問題