From 01bd6dfd7ddfc76a2cecda5358aaecb527d80386 Mon Sep 17 00:00:00 2001
From: Lucas Brandstaetter <lucas@brandstaetter.tech>
Date: Mon, 21 Oct 2024 01:12:05 +0000
Subject: [PATCH] Fix conference accessible_by_user

Using union prevents us from using filters in the get() method, so we
need to use a list of ids instead.
---
 src/core/models/conference.py | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/core/models/conference.py b/src/core/models/conference.py
index 0b8be5714..f1d5bbe2a 100644
--- a/src/core/models/conference.py
+++ b/src/core/models/conference.py
@@ -179,14 +179,12 @@ class ConferenceManager(models.Manager):
             return qs
 
         # limit on the public ones
-        qs = qs.filter(is_public=True)
+        public_query = qs.filter(is_public=True).values('id')
 
         # for logged-in members, add all non-public conferences in which the user has the staff flag set
-        conf_ids = ConferenceMember.objects.filter(user=user, is_staff=True, conference__is_public=False).values_list('conference_id', flat=True)
-        if len(conf_ids) > 0:
-            qs = qs.union(self.get_queryset().filter(id__in=conf_ids))
+        conf_staff_query = ConferenceMember.objects.filter(user=user, is_staff=True, conference__is_public=False).values('conference_id')
 
-        return qs
+        return qs.filter(id__in=public_query.union(conf_staff_query))
 
     def public_accessible(self):
         return self.get_queryset().filter(is_public=True)
-- 
GitLab