39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
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()
|