[英]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.