diff --git a/awx/api/views/mixin.py b/awx/api/views/mixin.py index bbbad4d282..dc72a994b7 100644 --- a/awx/api/views/mixin.py +++ b/awx/api/views/mixin.py @@ -182,13 +182,19 @@ class OrganizationCountsMixin(object): # # Use independent subqueries instead of double-JOIN Count to avoid # cartesian product. - RoleMember = Role.members.through + role_members_through = Role.members.through member_count = Subquery( - RoleMember.objects.filter(role_id=OuterRef('member_role_id')).values('role_id').annotate(cnt=Count('user_id', distinct=True)).values('cnt'), + role_members_through.objects.filter(role_id=OuterRef('member_role_id')) + .values('role_id') + .annotate(cnt=Count('user_id', distinct=True)) + .values('cnt'), output_field=IntegerField(), ) admin_count = Subquery( - RoleMember.objects.filter(role_id=OuterRef('admin_role_id')).values('role_id').annotate(cnt=Count('user_id', distinct=True)).values('cnt'), + role_members_through.objects.filter(role_id=OuterRef('admin_role_id')) + .values('role_id') + .annotate(cnt=Count('user_id', distinct=True)) + .values('cnt'), output_field=IntegerField(), ) db_results['users'] = org_qs.annotate( diff --git a/awx/api/views/organization.py b/awx/api/views/organization.py index 495a72302e..ec3153a0c4 100644 --- a/awx/api/views/organization.py +++ b/awx/api/views/organization.py @@ -80,13 +80,19 @@ class OrganizationDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPI access_kwargs = {'accessor': self.request.user, 'role_field': 'read_role'} # Use independent subqueries instead of double-JOIN Count to avoid # cartesian product. - RoleMember = Role.members.through + role_members_through = Role.members.through member_count = Subquery( - RoleMember.objects.filter(role_id=OuterRef('member_role_id')).values('role_id').annotate(cnt=Count('user_id', distinct=True)).values('cnt'), + role_members_through.objects.filter(role_id=OuterRef('member_role_id')) + .values('role_id') + .annotate(cnt=Count('user_id', distinct=True)) + .values('cnt'), output_field=IntegerField(), ) admin_count = Subquery( - RoleMember.objects.filter(role_id=OuterRef('admin_role_id')).values('role_id').annotate(cnt=Count('user_id', distinct=True)).values('cnt'), + role_members_through.objects.filter(role_id=OuterRef('admin_role_id')) + .values('role_id') + .annotate(cnt=Count('user_id', distinct=True)) + .values('cnt'), output_field=IntegerField(), ) direct_counts = (