更改用户内联后如何在 Django 管理员中发送一次电子邮件?

How to send email once in Django admin after i have changed user inlines?

例如,假设我有这样的代码:

models.py

class Application(models.Model):
    user = models.ForeignKey("account.Account", on_delete=models.CASCADE)
    status_choices = [(1.0, "Waiting for info"),
                      (2.0, "Processing"),
                      (3.0, "Problem detected"),
                      (4.0, "Accepted"),
                      (5.0, "Rejected")]
    status = models.FloatField(choices=status_choices, default=status_choices[0][0])

admin.py

class ApplicationInLine(admin.TabularInline):
    models = Application


@admin.register(Account)
class AccountAdmin(UserAdmin):
    inlines = (ApplicationInLine,)

现在在 Django 管理页面上,我想更改用户应用程序状态。 如果我在一个用户下只有一个应用程序,那没关系,我可以使用信号通过电子邮件通知用户状态已更改。

但是如果我在一个用户下有多个应用程序,例如 4 个,并且我想在我单击管理员上的保存按钮之前立即更改所有应用程序状态,那么信号将触发 4 次。

我已经尝试过覆盖保存方法,但我得到了相同的结果。

有谁知道我怎样才能只发送一次电子邮件,即使一个用户下的多个应用程序发生了变化?

ModelAdmin 有一个 save_formset() 方法,在保存内联时调用。如何覆盖该方法并检查表单集中的更改?类似于:

class AccountAdmin(admin.ModelAdmin):
    inlines = (ApplicationInLine,)

    def save_formset(self, request, form, formset, change):
        if formset.has_changed():
            # Send your mail to user
        super().save_formset(request, form, formset, change)