在 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 的行已经存在,但是都能够正常保存。请问我在哪里理解错误了?又是什么情况才会触发文档中的错误。
