【发布时间】:2013-09-26 01:39:09
【问题描述】:
当我调用save 方法时,我的实例似乎被保存了。问题:我的数据库中已经存在该实例!
我的模特:
class DosIdModel(models.Model):
dosId = models.IntegerField(max_length=7, primary_key=True)
proposOrigine = models.CharField(max_length=4)
proposAnnee = models.IntegerField(max_length=4)
proposChrono = models.CharField(max_length=7)
splitNumber = models.IntegerField(max_length=1, blank=True, null=True, default=None)
我的看法:
instance = DosIdModel()
instance.dosId=int(row[0])
instance.proposOrigine=row[1].strip()
instance.proposAnnee=int(row[2])
instance.proposChrono=row[3].strip()
instance.splitNumber=emptyOrVar(row[4], "int")
msg=(instance.dosId)
savedList=[]
errors_list=[]
try:
print "exist: ", DosIdModel.objects.get(dosId=instance.dosId).dosId
instance.save()
print "saved"
savedList.append(msg)
print "end try"
except IntegrityError, e:
print "except"
error= "The row " + str(msg) + " already exists!!"
控制台中的结果:
exist: 104486
saved
end try
怎么了?
【问题讨论】:
-
抱歉,不知道该代码 sn-p 试图演示什么。
-
为什么会出现这个问题?显然已经有一个相同的
dosId记录。所以.save()只会更新该记录。 -
如果您正在处理来自表单的数据,您最好使用集成表单...
-
我认为
save方法仅适用于INSERT查询。我将此代码与其他模型一起使用,如果对象已经存在,它会抛出IntegrityError。正如Kevin所指出的,原因可能是我没有在我的其他模型中声明primary key(我使用Django创建的auto primary key)。 -
所以我最终使用了
force_insert=True(我不想使用update,只想使用insert)。
标签: django model save instance