Как отправить электронное письмо один раз в Django администратор после того, как я изменил пользовательские адреса? - PullRequest
0 голосов
/ 12 января 2020

Например, допустим, у меня есть такой код:

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 раза.

Я уже пытался перезаписать метод сохранения, но у меня есть результаты те же.

Кто-нибудь знает, как я могу отправить электронное письмо только один раз, даже если в одном приложении было изменение в одном пользователе?

1 Ответ

1 голос
/ 13 января 2020

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...