Фильтрация значений на основе регистра, когда возвращаемые значения приводят к SyntaxError

У меня есть модель базы данных object snapshot, сохраняющая некоторые данные относительно произвольной модели в моем проекте:

class ObjectSnapshot(Model):
    user = ForeignKey(to=User, on_delete=SET_NULL, null=True, blank=True)
    timestamp = DateTimeField(verbose_name=_("Date when the document was generated"), auto_now_add=True)
    content_type = ForeignKey(ContentType, on_delete=CASCADE)
    object_id = PositiveIntegerField(verbose_name=_("Id of the referenced object"))
    content_object = GenericForeignKey("content_type", "object_id")
    data = JSONField(verbose_name=_("Serialized object"), default=dict, null=False, blank=True)

Может быть несколько снимков для одного и того же объекта (ссылающихся на одни и те же object_id и content_type), есть также несколько снимков, ссылающихся на один и тот же "логический объект", что означает, что, например, object_id отличается, но эти объекты имеют общие значения некоторых полей, что указывает на то, что они являются одним и тем же объектом (это будет лучше объяснено на примере запроса ниже).

Теперь я хочу написать запрос, извлекающий список этих объектов, аннотированный их "предыдущей" записью.

ObjectSnapshot.objects.annotate(
    previous_id=Subquery(
        ObjectSnapshot.objects.filter(
            content_type=OuterRef('content_type'),
            object_id__in=Case(
                When(
                    content_type__model='somemodel',
                    then=Subquery(
                        SomeModel.objects.filter(
                            field_name=Subquery(  # the `field_name` refers to the same "logical object"
                                SomeModel.objects.filter(
                                    id=OuterRef(OuterRef('object_id')),
                                ).values(
                                    'field_name'
                                )[:1]
                            ),
                        ).annotate(ids=ArrayAgg('id')).values('ids')[:1],
                    ),
                ),
                default=ArrayAgg(OuterRef('object_id')),
                output_field=ArrayField(base_field=IntegerField()),
            ),
        ).exclude(
            pk=OuterRef('pk')
        ).values_list(
            'object_id'
        ).order_by(
            '-timestamp'
        )[:1]
    )
)

Пытаясь выполнить этот запрос, я получаю:

syntax error at or near "ARRAY_AGG"
LINE 1: ...g_objectsnapshot"."id")) HAVING U0."object_id" IN ARRAY_AGG(...
                                                             ^
Вернуться на верх