django save方法如何工作?有时会创建新记录并有时更新,为什么?

时间:2017-10-09 09:16:10

标签: python django django-models

我想问为什么这段代码:

object(group_id=group_id, sr=11).save()

使用特定的group_id更新所有记录并将其sr设置为11,而以下代码在数据库中创建新记录,而不是更新现有记录。

g = object(group_id=group_id, sr=11)
g.save()

上面的代码在数据库中创建新记录,而第一个代码更新现有记录,为什么?有什么区别?

感谢您的回答。

3 个答案:

答案 0 :(得分:3)

  • 如果对象的主键属性设置为该值 计算结果为True(即,除None之外的值或空值 字符串),Django执行 UPDATE
  • 如果未设置对象的主键属性或者是UPDATE 没有更新任何内容,Django执行 INSERT

有关更多详细信息,请查看Django文档。 How django knows when to update vs insert

答案 1 :(得分:1)

@chintan Joshi的回答是正确的。

如果 group_id 是主键,则代码段结果都相同。 如果不是,它会有所不同。

答案 2 :(得分:0)

所以最后我发现了这个问题。我们可以认为Chintan Joshi的回答是正确的。问题出在我的代码中。由于数据库比我们的项目早得多,因此我们不使用迁移。我们根据db模型手动映射它。偶然我们在django模型中将group_id标记为primary_key,但是在数据库中它只是一个公共字段。它在没有警告的情况下引谢谢你的回答人。