You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django ORM中Model.objects.create与Model.save()的差异及相关问题

Django ORM 问题解答

问题1:实例化后调用save()的对象,内存中id字段是否会更新?

当执行p2 = Person(name="Bob");p2.save()时,内存中的p2对象id字段会被自动更新。
Django在调用save()将对象写入数据库后,会把数据库自动生成的主键(此处为BigAutoField生成的id)同步回内存中的对象实例,和Person.objects.create()的效果完全一致——两种方式最终得到的内存对象都包含有效的id值。

问题2:使用不同方式创建的Person对象关联Business,是否有差异?

没有差异。
不管是通过create()直接创建的p1,还是先实例化再save()得到的p2,只要它们已经被保存到数据库(即拥有有效的主键id),将其传入Business的owner字段并执行save(),最终都会在Business表中正确存储对应的owner_id,关联到对应的Person记录。两种方式的执行逻辑和结果完全一致。

问题3:传入未保存的Person对象到Business并save,会发生什么?

Django会自动执行级联保存:

  1. 先将未保存的p对象写入数据库,生成对应的id值;
  2. 再将b对象写入数据库,将其owner_id设置为刚生成的p的id,完成关联。
    默认情况下,这两个操作会在同一个数据库事务中完成,确保数据一致性——如果其中任何一步失败,整个操作都会回滚。

内容的提问来源于stack exchange,提问作者de1337ed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:37:42