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



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

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)

最新更新