from django.contrib.postgres.fields import ArrayField from django.db.models import Subquery from django.utils.functional import cached_property class ArraySubquery(Subquery): template = 'ARRAY(%(subquery)s)' def __init__(self, queryset, **kwargs): super().__init__(queryset, **kwargs) @cached_property def output_field(self): return ArrayField(self.query.output_field)