From ec75a6f966c375cfcc4a29ecee00b2e2d521f59f Mon Sep 17 00:00:00 2001 From: Dirk Julich Date: Thu, 18 Jun 2026 15:47:37 +0200 Subject: [PATCH] Cast OuterRef('pk') to TextField for RoleUserAssignment.object_id comparison RoleUserAssignment.object_id is a TextField, but OuterRef('pk') on Organization produces an integer. PostgreSQL strictly rejects text = integer comparisons. Use Cast() to explicitly convert the PK to text. Co-Authored-By: Claude Opus 4.6 --- awx/api/views/mixin.py | 6 +++--- awx/api/views/organization.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/awx/api/views/mixin.py b/awx/api/views/mixin.py index e804fc0ff6..beb0aca007 100644 --- a/awx/api/views/mixin.py +++ b/awx/api/views/mixin.py @@ -4,8 +4,8 @@ import dateutil import logging -from django.db.models import Count, OuterRef, Subquery -from django.db.models.functions import Coalesce +from django.db.models import Count, OuterRef, Subquery, TextField +from django.db.models.functions import Cast, Coalesce from django.db import transaction from django.shortcuts import get_object_or_404 from django.utils.timezone import now @@ -188,7 +188,7 @@ class OrganizationCountsMixin(object): return Coalesce( Subquery( RoleUserAssignment.objects.filter( - object_id=OuterRef('pk'), + object_id=Cast(OuterRef('pk'), output_field=TextField()), role_definition=rd, ) .values('role_definition') diff --git a/awx/api/views/organization.py b/awx/api/views/organization.py index ac2c871a96..24054383f1 100644 --- a/awx/api/views/organization.py +++ b/awx/api/views/organization.py @@ -5,8 +5,8 @@ import logging # Django -from django.db.models import Count, OuterRef, Subquery -from django.db.models.functions import Coalesce +from django.db.models import Count, OuterRef, Subquery, TextField +from django.db.models.functions import Cast, Coalesce from django.contrib.contenttypes.models import ContentType from django.utils.translation import gettext_lazy as _ @@ -88,7 +88,7 @@ class OrganizationDetail(RelatedJobsPreventDeleteMixin, RetrieveUpdateDestroyAPI return Coalesce( Subquery( RoleUserAssignment.objects.filter( - object_id=OuterRef('pk'), + object_id=Cast(OuterRef('pk'), output_field=TextField()), role_definition=rd, ) .values('role_definition')