我有一个非常大的模型,有步骤形式。所以我决定在每个页面上获取前一个对象并在表单中更新他的属性。我做的第一种形式是:
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
mtm需要ID。所以我设置了默认值。
然后在最后一步中我做:
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()
但它没有帮助。
答案 0 :(得分:2)
这可能是因为id
字段用作模型的主键。当您将id
设置为None
,然后保存该对象时,它实际上会创建一个新对象,其ID从前一个最后一个对象开始按顺序迭代。