你可能已经注意到 Django 数据库对象使用相同的 save() 方法来创建和更改对象。Django 抽象了需要使用 INSERT 或 UPDATE 的 SQL 语句。具体来说,当你调用 save(),而对象的主键属性 没有 定义一个 default 时,Django 会遵循这个算法。
如果对象的主键属性被设置为值为 True (即,一个不是 None 或空字符串的值),Django 会执行 UPDATE。
如果对象的主键属性没有设置,或者 UPDATE 没有更新任何东西(例如主键被设置为数据库中不存在的值),Django 会执行 INSERT。
如果对象的主键属性定义了一个 default,那么如果它是一个现有的模型实例,并且主键被设置为数据库中存在的值,Django 就会执行一个 UPDATE。否则,Django 会执行一个 INSERT。