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

除save()/create()外Django是否自动保存模型对象?代码实例疑问

问题解答

你的代码如下:

class Foo(models.Model):
    a = models.CharField()

def f(foo: Foo) -> Foo:
    y = Foo(
        **{field.name: getattr(foo, field.name) for field in foo._meta.get_fields()}
    )  # copy foo with pk
    y.a = "c"
    return y

结论:对象y不会在调用save()前被保存到数据库,这种情况不可能发生。

Django的Model对象遵循"显式保存"的规则:只有当你主动调用save()方法时,才会将对象的状态同步到数据库中。你这段代码里只是在内存中创建了y的实例,修改了它的a属性,全程没有执行任何数据库写入操作,所以y只会存在于内存里,不会出现在数据库中。

另外补充:你通过复制原对象foo的所有字段(包括主键pk)创建的y,只是一个独立的内存对象,和原foo对应的数据库记录没有绑定关系,除非你主动调用y.save(),否则它永远不会被持久化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:30:57