我刚刚体验到,我的model.save()
命令是不必要的,因为显然image.save()
已经完成了,而且childs.add()
model = Model()
child = Child()
model.name = 'Test'
model.image.save(file)
model.childs.add(child)
model.save() # is not necessary
通常这甚至不适用于新条目,因为没有 pk 的 add 函数将无法工作。但看起来image.save()
方法不仅移动/上传了图像文件,而且还将整个模型保存到数据库中。childs.add()
似乎也是如此,因为此信息也会在不调用model.save()
的情况下更新。
我一直认为,更新数据库只有在调用model.save()
时才能完成,显然我错了,或者我的错误在哪里?
这是记录的。文档中甚至有一个突出显示的警告。
警告
此类的两个方法,save(( 和 delete((,默认保存 数据库中关联字段文件的模型对象。
默认情况下,FileField.save()
(ImageField 继承自(会将文件保存到文件存储和模型实例。这可确保数据库的状态和文件存储的状态一致。可以使用FileField.save()
方法中的命名参数save=False
重写此设置。
RelatedManager.add()
不会保存模型实例。但它将更新数据库中的关系,该关系在另一个模型中表示为外键或中间连接表。如果您对实例中的其他字段进行了更改,则必须使用save()
来保留这些更改。