from django.contrib.auth.models import User from django.db import models from django.utils import timezone from modelcluster.fields import ParentalKey from .pages import EventPage class EventOccurrence(models.Model): event = ParentalKey(EventPage, related_name="occurrences", on_delete=models.CASCADE) start = models.DateTimeField() end = models.DateTimeField() signed_up_users = models.ManyToManyField( User, related_name="event_occurrences_signed_up", blank=True, help_text="Users who have signed up for this occurrence.", ) class Meta: ordering = ["start"] def __str__(self): return f"{self.event.title} ({self.start} - {self.end})" @property def attendees_count(self): return self.signed_up_users.count() @property def is_past(self): return self.end < timezone.now() def user_signed_up(self, user): if not user.is_authenticated: return False return self.signed_up_users.filter(id=user.id).exists()