Skip to content

Commit 02755ca

Browse files
committed
Update Catalog manager methods and use subquery in viewset
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
1 parent dd38f6d commit 02755ca

2 files changed

Lines changed: 11 additions & 25 deletions

File tree

rdmo/projects/viewsets.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -920,4 +920,13 @@ class CatalogViewSet(ListModelMixin, GenericViewSet):
920920
serializer_class = CatalogSerializer
921921

922922
def get_queryset(self):
923-
return Catalog.objects.for_projects_view(self.request.user)
923+
queryset = (
924+
Catalog.objects.filter_current_site().filter_group(self.request.user)
925+
)
926+
availability_subquery = Subquery(
927+
queryset.filter_availability(self.request.user).values('pk')
928+
)
929+
return (
930+
queryset.filter(Q(pk__in=availability_subquery) | Q(projects__user=self.request.user))
931+
.order_by('-available', 'order', 'id').distinct()
932+
)

rdmo/questions/managers.py

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,32 +20,12 @@ def prefetch_elements(self):
2020

2121
def filter_for_user(self, user):
2222
return (
23-
self
24-
.filter_current_site()
23+
self.filter_current_site()
2524
.filter_group(user)
2625
.filter_availability(user)
2726
.order_by('-available', 'order')
2827
)
2928

30-
def for_projects_view(self, user):
31-
qs = self.filter_current_site().filter_group(user)
32-
33-
available_ids = (
34-
qs
35-
.filter_availability(user)
36-
.values('pk')
37-
)
38-
39-
return (
40-
qs
41-
.filter(
42-
models.Q(pk__in=available_ids) |
43-
models.Q(projects__user=user)
44-
)
45-
.distinct()
46-
.order_by('-available', 'order', 'id')
47-
)
48-
4929

5030
class CatalogManager(CurrentSiteManagerMixin, GroupsManagerMixin, AvailabilityManagerMixin, models.Manager):
5131

@@ -61,9 +41,6 @@ def prefetch_elements(self):
6141
def filter_for_user(self, user):
6242
return self.get_queryset().filter_for_user(user)
6343

64-
def for_projects_view(self, user):
65-
return self.get_queryset().for_projects_view(user)
66-
6744

6845
class SectionQuerySet(models.QuerySet):
6946

0 commit comments

Comments
 (0)