简体   繁体   English

使用commit = False保存的对象,仍然保存

[英]object that was saved with commit=False, still saved

I have a very big model, with steps form. 我有一个很大的模型,有步骤表。 So I decided on each page get previous object and update his attributes in form. 因此,我决定在每个页面上获取先前的对象并以表格形式更新其属性。 In first form I do: 在第一种形式中,我这样做:

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 is required by mtm. mtm需要ID。 So I set default one. 因此,我设置了默认值。

Then on last step in view I do: 然后在视图的最后一步,我执行以下操作:

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

But Django save two objects. 但是Django保存了两个对象。 One normal object and one empty with id 999999999 . 一个正常的对象和一个空的ID为999999999的对象。 Why ? 为什么呢

I tried do: 我试着做:

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

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

But it didn't help. 但这没有帮助。

This likely happens because the id field is used as a primary key for your model. 可能发生这种情况是因为id字段用作模型的主键。 When you set id to None , and then save the object, it'll actually create a new object with an id that's iterated sequentially from the previous last object. 当将id设置为None ,然后保存对象时,它实际上将创建一个具有从上一个最后一个对象开始顺序迭代的id的新对象。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM