Skip to content

Commit a5e8280

Browse files
committed
changed INVITED & ACTIVE filter; remove prefetch and annotate user qs with has_active_realm
1 parent d6913b6 commit a5e8280

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

src/etools/applications/users/filters.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,16 @@ def filter_queryset(self, request, queryset, view):
1313
class UserStatusFilter(BaseFilterBackend):
1414
def filter_queryset(self, request, queryset, view):
1515
if 'status' in request.query_params and request.query_params['status']:
16-
queryset = queryset.prefetch_related('realms')
1716
status_list = [status.strip().upper() for status in request.query_params['status'].split(',')]
1817
filters = models.Q()
1918
for status in status_list:
2019
if status == 'INACTIVE':
2120
filters |= models.Q(is_active=False)
2221
if status == 'ACTIVE':
23-
filters |= models.Q(is_active=True, last_login__isnull=False)
22+
filters |= models.Q(is_active=True, last_login__isnull=False, has_active_realm=True)
2423
if status == 'INVITED':
25-
filters |= models.Q(is_active=True, last_login__isnull=True)
24+
filters |= models.Q(is_active=True, last_login__isnull=True, has_active_realm=True)
2625
if status == 'INOPERATIVE':
27-
filters |= models.Q(is_active=True, realms__is_active=False)
26+
filters |= models.Q(is_active=True, has_active_realm=False)
2827
return queryset.filter(filters)
2928
return queryset

src/etools/applications/users/views_v3.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from django.contrib.auth.models import Group
66
from django.core.exceptions import ValidationError as DjangoValidationError
77
from django.db import connection, transaction
8-
from django.db.models import OuterRef, Prefetch, Q, Subquery
8+
from django.db.models import OuterRef, Prefetch, Q, Subquery, Case, When, BooleanField
99
from django.http import HttpResponseForbidden, HttpResponseRedirect
1010
from django.shortcuts import get_object_or_404
1111

@@ -337,7 +337,10 @@ def get_queryset(self):
337337

338338
return self.model.objects \
339339
.filter(realms__in=context_realms_qs) \
340-
.prefetch_related(Prefetch('realms', queryset=context_realms_qs))\
340+
.prefetch_related(Prefetch('realms', queryset=context_realms_qs)) \
341+
.annotate(has_active_realm=Case(
342+
When(realms__is_active=True, then=True),
343+
default=False, output_field=BooleanField())) \
341344
.distinct()
342345

343346
@transaction.atomic

0 commit comments

Comments
 (0)