在 release note 中写的是
Model.save() no longer attempts to find a row when saving a new Model instance and a default value for the primary key is provided, and always performs a single INSERT query.
This makes calling Model.save() while providing a default primary key value equivalent to passing force_insert=True to model’s save(). Attempts to use a new Model instance to update an existing row will result in an IntegrityError.
In order to update an existing model for a specific primary key value, use the update_or_create() method or QuerySet.filter(pk=…).update(…) instead.
貌似是 model 中有 id 时,只会执行插入而不会更新,从而可能触发 IntegrityError。
但是我在测试的时候发现
Class Order(models.Model):
status = models.PositiveSmallIntegerField(default=1)
order = Order.objects.filter(id=1).first()
order.status = 2
order.save()
或者
order = Order()
order.id =1
order.status=2
order.save()
这里 id=1 的行已经存在,但是都能够正常保存。请问我在哪里理解错误了?又是什么情况才会触发文档中的错误。