风格 - 何时序列化 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后端开发学习笔记使用动态修改fields的序列化器实现指定字段的查询以及RESTful风格的信息过滤
Django后端开发学习笔记使用动态修改fields的序列化器实现指定字段的查询以及RESTful风格的信息过滤
Django后端开发学习笔记使用动态修改fields的序列化器实现指定字段的查询以及RESTful风格的信息过滤