Python 样式-何时序列化Django模型实例:信号与模型';s保存方法

Python 样式-何时序列化Django模型实例:信号与模型';s保存方法,python,django,Python,Django,我计划在保存或更新Django模型时将其序列化为XML。(XML将被导入flash电影中)。监听post_save()或pre_save()信号,然后执行序列化,还是只在模型的save()方法中处理它更好。这样,新数据(执行序列化的原因)已经存在于数据库中。它将使代码变得更加清晰,只需从数据库中获取,而不必担心添加额外的值 另一种方法是与数据库并行维护xml文件。也就是说,在save()中,将数据添加到数据库和xml文件中。如果您处理的是大型表,那么这将大大减少开销。如果它是保存模型的核心功能,

我计划在保存或更新Django模型时将其序列化为XML。(XML将被导入flash电影中)。监听post_save()或pre_save()信号,然后执行序列化,还是只在模型的save()方法中处理它更好。这样,新数据(执行序列化的原因)已经存在于数据库中。它将使代码变得更加清晰,只需从数据库中获取,而不必担心添加额外的值


另一种方法是与数据库并行维护xml文件。也就是说,在save()中,将数据添加到数据库和xml文件中。如果您处理的是大型表,那么这将大大减少开销。

如果它是保存模型的核心功能,那么您希望它作为保存方法的一部分。然而,如果您已经有了一个功能模型,并且您想将其扩展用于其他目的,那么信号是您最好的选择,因为它们允许适当地解耦模块

一个很好的例子可能是,您希望向站点添加事件日志记录,因此只需侦听表示事件的信号,而不是修改原始站点代码

post_save()通常是最好的,因为它意味着模型已成功保存,使用pre_save()不能保证保存成功,因此不应用于任何依赖于保存完成的内容。

“数据库中已有的数据”不会使代码更干净。无论是哪种方式,如果您想从模型对象中提取数据,都不需要额外访问数据库。Post_save是正确的答案,但@Andrew Ingram有正确的理由。