风格 - 何时序列化 Django 模型实例:信号与模型的保存方法

Posted

技术标签:

【中文标题】风格 - 何时序列化 Django 模型实例:信号与模型的保存方法【英文标题】:Style - When to serialize a Django model Instance: signals vs model's save method 【发布时间】:2010-09-12 23:29:36 【问题描述】:

我计划在保存或更新 Django 模型时将其序列化为 XML。 (XML 将被导入到 Flash 电影中)。是侦听 post_save() 或 pre_save() 信号然后执行序列化,还是只在模型的 save() 方法中处理它更好

【问题讨论】:

【参考方案1】:

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

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

post_save() 通常是最好的,因为它意味着模型已经成功保存,使用 pre_save() 并不能保证保存会成功,所以不应该用于任何取决于保存完成的事情。

【讨论】:

【参考方案2】:

保存后。这样,新数据(执行序列化的原因)已经在数据库中。这将使代码更简洁,只需从数据库中获取,而不必担心添加额外的值。

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

【讨论】:

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

以上是关于风格 - 何时序列化 Django 模型实例:信号与模型的保存方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中序列化模型实例?

Django后端开发学习笔记使用动态修改fields的序列化器实现指定字段的查询以及RESTful风格的信息过滤

Django后端开发学习笔记使用动态修改fields的序列化器实现指定字段的查询以及RESTful风格的信息过滤

Django后端开发学习笔记使用动态修改fields的序列化器实现指定字段的查询以及RESTful风格的信息过滤

Django rest框架 - 模型序列化程序不会序列化所有字段

Django:如何在 post_save 信号中访问原始(未修改)实例