From dddf5cf70ddde4da2cb2e338863806edd7780ae2 Mon Sep 17 00:00:00 2001 From: Artur Borecki Date: Mon, 16 Mar 2026 12:26:08 +0100 Subject: [PATCH] feat(models.py): add `max_attendees` and `signed_up_users` fields to `EventPage` --- home/models.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/home/models.py b/home/models.py index 1f47f86..53390f8 100644 --- a/home/models.py +++ b/home/models.py @@ -85,6 +85,11 @@ class EventPage(Page): # TODO: use google maps here location = models.CharField(max_length=255, blank=True) + max_attendees = models.PositiveIntegerField( + null=True, + blank=True, + help_text="Maximum number of attendees. Leave blank for unlimited.", + ) description = RichTextField(blank=True) hosts = ParentalManyToManyField( @@ -92,12 +97,35 @@ class EventPage(Page): related_name="hosted_events", help_text="Select users who will be listed as hosts of this event.", ) + signed_up_users = models.ManyToManyField( + User, + related_name="signed_up_events", + blank=True, + help_text="Users who have signed up for this event.", + ) + + @property + def attendees_count(self): + return self.signed_up_users.count() # pyright: ignore[reportAttributeAccessIssue] + + def _user_signed_up(self, user): + if not user.is_authenticated: + return False + + return self.signed_up_users.filter(id__in=[user.id]).exists() # pyright: ignore[reportAttributeAccessIssue] + + def get_context(self, request): + context = super().get_context(request) + context["user_signed_up"] = self._user_signed_up(request.user) + return context content_panels = Page.content_panels + [ FieldPanel("image"), FieldPanel("start"), FieldPanel("end"), FieldPanel("location"), + FieldPanel("max_attendees"), FieldPanel("hosts", widget=CheckboxSelectMultiple), FieldPanel("description"), + FieldPanel("signed_up_users", read_only=True, widget=CheckboxSelectMultiple), ]