From 5e4e88c91dce765f049c772206ba886b01c05062 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Tue, 12 Nov 2024 09:22:25 +0100 Subject: [PATCH] Fix creating to many ScheduledMails on subevent creation (#4620) --- .../migrations/008_remove_scheduled_mails.py | 19 +++++++++++++++++++ src/pretix/plugins/sendmail/signals.py | 9 ++++----- 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 src/pretix/plugins/sendmail/migrations/008_remove_scheduled_mails.py diff --git a/src/pretix/plugins/sendmail/migrations/008_remove_scheduled_mails.py b/src/pretix/plugins/sendmail/migrations/008_remove_scheduled_mails.py new file mode 100644 index 000000000..5ed380af6 --- /dev/null +++ b/src/pretix/plugins/sendmail/migrations/008_remove_scheduled_mails.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.16 on 2024-11-08 13:36 + +from django.db import migrations +from django.db.models import F + + +def remove_unnecessary_mails(apps, schema_editor): + ScheduledMail = apps.get_model("sendmail", "ScheduledMail") + ScheduledMail.objects.filter(rule__subevent__isnull=False).exclude(subevent=F('rule__subevent')).delete() + + +class Migration(migrations.Migration): + dependencies = [ + ("sendmail", "0007_bigint"), + ] + + operations = [ + migrations.RunPython(remove_unnecessary_mails), + ] diff --git a/src/pretix/plugins/sendmail/signals.py b/src/pretix/plugins/sendmail/signals.py index 418f2545c..cfc164419 100644 --- a/src/pretix/plugins/sendmail/signals.py +++ b/src/pretix/plugins/sendmail/signals.py @@ -65,11 +65,10 @@ def scheduled_mail_create(sender, **kwargs): with scope(organizer=event.organizer): existing_rules = ScheduledMail.objects.filter(subevent=subevent).values_list('rule_id', flat=True) to_create = [] - for rule in event.sendmail_rules.all(): - if rule.pk not in existing_rules and subevent: - sm = ScheduledMail(rule=rule, event=event, subevent=subevent) - sm.recompute() - to_create.append(sm) + for rule in event.sendmail_rules.filter(subevent=None).exclude(id__in=existing_rules): + sm = ScheduledMail(rule=rule, event=event, subevent=subevent) + sm.recompute() + to_create.append(sm) ScheduledMail.objects.bulk_create(to_create)