2010-04-29 48 views
2

我得到了一个模型TrackedItem,它具有链接到它应该跟踪的任何模型的通用关系。为什么我不能在Django中使用泛型关系保存模型两次?

如果我这样做:

t = TrackedItem(content_object=MyModel) 
t.save() 
t.save() 

我得到:

IntegrityError: (1062, "Duplicate entry '1' for key 'PRIMARY'") 

事实上,先救创造了以 “1” 作为PK的条目。但第二次保存不应该插入,它应该更新。

我想如何更新模型我无法保存两次?

用一个普通的模型,我可以保存尽可能多的,我想要的。

编辑:它可能与通用关系根本没有关系。

我有一个overrided保存,我称之为超在里面,这样说:

super(TrackedItem, self).save(self, *args, **kwargs) 

,如果我做这种方式,它的工作原理:

model.Model.save(self, *args, **kwargs) 
+1

是什么让你觉得这与通用关系有关?你有没有在这个模型上自定义'save()'方法? – 2010-04-29 09:35:43

+0

你说得对,我正在使用custome'save':-)我要添加关于这个问题的信息? – 2010-04-29 09:49:47

回答

5

你的问题很可能是因为错误使用 '超级' 的。它应该是这样的:

super(TrackedItem, self).save(*args, **kwargs) 
0

我想这是数据库事务问题。这两个保存电话是否有一个DB-Commit?也许你的视图在transaction.commit_on_sucess controll下。

两个可能性:

transaction.commit() # within transaction.commit_manually 

t.save(force_update=True) # 2nd save call 
+0

不,这是一个非常基本的代码,我没有在任何地方使用提交。另外,grepping我使用的lib不显示任何“提交”。我尝试了“force_update”,但最终以“ValueError:无法在模型保存中强制插入和更新”。 – 2010-04-29 09:48:28

+0

好吧,那么它在你的自定义保存中可能会失败(就像Botondus说的)。 看看你写在问题中的自定义保存。他们是一个错误的'自我'。 它应该是这样的形式: super(TrackedItem,self).save(* args,** kwargs) – maersu 2010-04-29 11:52:28

相关问题