如何发送电子邮件一次在Django管理后,我已经改变了用户内联线?

2024-09-30 22:16:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

型号.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,我想在单击admin上的Save按钮之前立即更改所有应用程序状态,那么信号将触发4次

我也尝试过覆盖save方法,但得到了相同的结果

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


Tags: 代码用户py应用程序admin信号applicationmodels
1条回答
网友
1楼 · 发布于 2024-09-30 22:16:00

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)

相关问题 更多 >