From 0dca0d95e8bd87c40bc5f0e677e93b4aa50356e9 Mon Sep 17 00:00:00 2001 From: Quinten Kock Date: Sat, 11 Jan 2025 22:12:26 +0100 Subject: [PATCH] Replace complicated query with two queries and process Python-side Cache member_groups Make logic in is_organiser more explicit Do explicit cache invalidation in test invalidate cache in more places fix --- website/events/services.py | 12 +++++++----- website/events/tests/test_services.py | 1 + website/members/models/member.py | 4 ++++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/website/events/services.py b/website/events/services.py index 63d12779d..4f7078da4 100644 --- a/website/events/services.py +++ b/website/events/services.py @@ -272,11 +272,13 @@ def is_organiser(member, event): return True if event: - return ( - member.get_member_groups() - .filter(pk__in=event.organisers.values_list("pk")) - .exists() - ) + member_groups = set(member.member_groups) + + for organiser in event.organisers.all(): + if organiser in member_groups: + return True + + return False return False diff --git a/website/events/tests/test_services.py b/website/events/tests/test_services.py index 3618d58c7..e7920c057 100644 --- a/website/events/tests/test_services.py +++ b/website/events/tests/test_services.py @@ -185,6 +185,7 @@ def test_is_organiser(self): membership = MemberGroupMembership.objects.create( member=self.member, group=self.committee ) + del self.member.member_groups self.assertTrue(services.is_organiser(self.member, self.event)) self.assertFalse(services.is_organiser(self.member, None)) self._toggle_event_change_perm(False) diff --git a/website/members/models/member.py b/website/members/models/member.py index d3bdbba92..b07f264f2 100644 --- a/website/members/models/member.py +++ b/website/members/models/member.py @@ -215,5 +215,9 @@ def get_member_groups(self): active=True, ) + @cached_property + def member_groups(self): + return self.get_member_groups() + def get_absolute_url(self): return reverse("members:profile", args=[str(self.pk)])