imageField.save() 和 add() 是否将整个模型保存在 django 中?



我刚刚体验到,我的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()来保留这些更改。

最新更新