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 <noreply@anthropic.com>
This commit is contained in:
Dirk Julich
2026-06-18 15:47:37 +02:00
parent 3bdb6362ad
commit ec75a6f966
2 changed files with 6 additions and 6 deletions

View File

@@ -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')

View File

@@ -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')