使用未保存的相关对象保存对象

时间:2016-06-29 09:15:00

标签: python django

为什么django没有提供自动保存未保存的相关对象的能力?

来自docs

  

在Django 1.8.4中更改:

     

以前,保存未保存的对象   相关对象没有引发错误,可能导致静默数据   失利。在1.8-1.8.3中,无法分配未保存的模型实例   相关字段,但删除了此限制以便于使用   内存模型。

我能理解为什么会有

ValueError: save() prohibited to prevent data loss due to unsaved related object

而不是默认保存该对象(我的猜测是显式优于隐式),但我甚至无法找到上述功能请求。

1 个答案:

答案 0 :(得分:4)

来自ticket that lead to the change

  

我希望通过在未保存的对象分配到相关字段时引发异常来提前和大声失败。

     

我可以听一个试图从save()中的缓存相关实例重新获取pk的参数,但这感觉就像在远处动作:实际问题通常发生在早期。

     

自动保存相关对象太神奇了;我确信在某些情况下它会被认为是意料之外的。

我的解释是,Django的开发人员不希望人们养成自动保存的习惯,因为这会在不同的时间点导致问题。每个对象的显式保存可确保开发人员充分了解正在保存的内容,并减少对一行代码破坏功能的意外更改。