除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
相关产品推荐
相关产品推荐

