Sendmail: Improve performance of creating rules

This commit is contained in:
Raphael Michel
2021-06-30 12:31:20 +02:00
parent 212f33afee
commit 11b1c81633

View File

@@ -210,6 +210,7 @@ class Rule(models.Model):
objects = ScopedManager(organizer='event__organizer') objects = ScopedManager(organizer='event__organizer')
def save(self, **kwargs): def save(self, **kwargs):
is_creation = not self.pk
super().save(**kwargs) super().save(**kwargs)
create_sms = [] create_sms = []
@@ -223,16 +224,17 @@ class Rule(models.Model):
else: else:
ScheduledMail.objects.get_or_create(rule=self, event=self.event) ScheduledMail.objects.get_or_create(rule=self, event=self.event)
update_sms = [] if not is_creation:
for sm in self.scheduledmail_set.all(): update_sms = []
if sm in create_sms: for sm in self.scheduledmail_set.prefetch_related('event').select_related('subevent'):
continue if sm in create_sms:
previous = sm.computed_datetime continue
sm.recompute() previous = sm.computed_datetime
if sm.computed_datetime != previous: sm.recompute()
update_sms.append(sm) if sm.computed_datetime != previous:
update_sms.append(sm)
ScheduledMail.objects.bulk_update(update_sms, ['computed_datetime', 'last_computed'], 100) ScheduledMail.objects.bulk_update(update_sms, ['computed_datetime', 'last_computed'], 100)
@property @property
def human_readable_time(self): def human_readable_time(self):