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

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

【问题讨论】:

    标签: python django


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • “数据库中已有数据”不会使代码更清晰。无论您想从模型对象中提取数据,都不需要额外访问数据库。 Post_save 是正确的答案,但@Andrew Ingram 有正确的理由。
      猜你喜欢
      • 2022-01-24
      • 2019-09-09
      • 2010-10-19
      • 2020-06-19
      • 1970-01-01
      • 2018-03-21
      • 2021-07-13
      • 1970-01-01
      • 2015-02-27
      相关资源
      最近更新 更多