【问题标题】:Django: what is the difference between "overriding save()" and "using save signal"?Django:“覆盖保存()”和“使用保存信号”有什么区别?
【发布时间】:2018-07-22 16:19:22
【问题描述】:

我认为任何可以用signal 完成的事情也可以通过覆盖Model 中的save() 方法来完成。

如果是这样,为什么我们需要一个信号?我找不到何时使用signal

谢谢

【问题讨论】:

标签: django django-models django-signals


【解决方案1】:

我认为这可能会澄清你的疑虑:

About Django signals and override save method

基本上,人们在执行保存之前或之后重写 save 方法来操作模型中的数据,信号被精确地完成以覆盖该场景的更多可能性而无需更改。

【讨论】:

    【解决方案2】:

    在很多情况下使用信号是必不可少的。由于您正在与覆盖的 save() 方法进行比较,因此此示例将为您提供一种使用 post_save 信号的场景。 使用 post_save 信号,您可以在信号之前访问存储在数据库中的全部数据,即 它还将为您提供数据库刚刚存储的数据的自动生成 ID(无论是 mysql、postgresql、mongodb 等。 )。 如果您使用单个 save() 函数保存两个模型并希望将两个模型与相同的自动生成的 pk 链接起来,则可以使用此选项。

    【讨论】:

    • 你能给我一些例子吗?我认为save() 也访问了存储在数据库中的整个数据?
    猜你喜欢
    • 2010-09-15
    • 2011-08-17
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2010-10-31
    • 2013-03-16
    相关资源
    最近更新 更多