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

时间:2017-09-25 21:10:11

标签: python django

我有一个非常大的模型,有步骤形式。所以我决定在每个页面上获取前一个对象并在表单中更新他的属性。我做的第一种形式是:

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()

但它没有帮助。

1 个答案:

答案 0 :(得分:2)

这可能是因为id字段用作模型的主键。当您将id设置为None,然后保存该对象时,它实际上会创建一个新对象,其ID从前一个最后一个对象开始按顺序迭代。