def delete(self, using=None, keep_parents=False): using = using or router.db_for_write(self.__class__, instance=self) collector = Collector(using=using) collector.collect([self], keep_parents=keep_parents) if (self.registration_reminder is not None and not self.registration_reminder.sent): collector.add([self.registration_reminder]) if self.start_reminder is not None and not self.start_reminder.sent: collector.add([self.start_reminder]) if self.is_pizza_event(): collector.add([self.pizzaevent]) return collector.delete()
def related_objects(target): collector = Collector(None) collector.add([target]) yield from collector.instances_with_model()
def save(self, *args, **kwargs): delete_collector = Collector( using=router.db_for_write(self.__class__, instance=self)) if not self.pk: super().save(*args, **kwargs) if self.published: if self.registration_required: registration_reminder_time = (self.registration_start - timezone.timedelta(hours=1)) registration_reminder = ScheduledMessage() if (self.registration_reminder is not None and not self.registration_reminder.sent): registration_reminder = self.registration_reminder if registration_reminder_time > timezone.now(): registration_reminder.title_en = "Event registration" registration_reminder.title_nl = "Evenement registratie" registration_reminder.body_en = ("Registration for '{}' " "starts in 1 hour".format( self.title_en)) registration_reminder.body_nl = ("Registratie voor '{}' " "start in 1 uur".format( self.title_nl)) registration_reminder.category = Category.objects.get( key=Category.EVENT) registration_reminder.time = registration_reminder_time registration_reminder.url = ( f"{settings.BASE_URL}" f'{reverse("events:event", args=[self.id])}') registration_reminder.save() self.registration_reminder = registration_reminder self.registration_reminder.users.set( Member.current_members.all()) elif registration_reminder.pk is not None: delete_collector.add([self.registration_reminder]) self.registration_reminder = None start_reminder_time = self.start - timezone.timedelta(hours=1) start_reminder = ScheduledMessage() if self.start_reminder is not None and not self.start_reminder.sent: start_reminder = self.start_reminder if start_reminder_time > timezone.now(): start_reminder.title_en = "Event" start_reminder.title_nl = "Evenement" start_reminder.body_en = f"'{self.title_en}' starts in " "1 hour" start_reminder.body_nl = f"'{self.title_nl}' begint over " "1 uur" start_reminder.category = Category.objects.get( key=Category.EVENT) start_reminder.time = start_reminder_time start_reminder.save() self.start_reminder = start_reminder if self.registration_required: self.start_reminder.users.set( [r.member for r in self.participants if r.member]) else: self.start_reminder.users.set(Member.current_members.all()) elif start_reminder.pk is not None: delete_collector.add([self.start_reminder]) self.start_reminder = None else: if (self.registration_reminder is not None and not self.registration_reminder.sent): delete_collector.add([self.registration_reminder]) self.registration_reminder = None if self.start_reminder is not None and not self.start_reminder.sent: delete_collector.add([self.start_reminder]) self.start_reminder = None super().save() delete_collector.delete()