Могу ли я использовать аннотированный параметр подзапроса позже в том же запросе?

У меня есть Django queryset, который в идеале делает некоторые аннотации и фильтрацию с 3 классами объектов. У меня есть Conversations, Tickets и Interactions.

Моим желаемым результатом будет Разговоры, которые имеют 1. открытый билет и 2. ровно ОДНО взаимодействие, типа mass_text, с даты создания_at билета.

Я пытаюсь аннотировать запрос беседы с ticket_created_at & отфильтровать Nones, затем как-то использовать этот ticket_created_at параметр в последующей аннотации/подзапросе для получения количества взаимодействий с ticket_created_at даты. Возможно ли это сделать?

class Interaction(PolymorphicModel):
    when = models.DateTimeField()
    conversation = models.ForeignKey(Conversation)
    mass_text = models.ForeignKey(MassText)

class Ticket(PolymorphicModel):
    created_at = models.DateTimeField()
    conversation = models.ForeignKey(Conversation)
    status = models.CharField()

########################################################

open_ticket_subquery = (
    Ticket.objects.filter(conversation=OuterRef("id"))
    .filter(status=Ticket.Status.OPEN)
    .order_by("-created_at")
)

filtered_conversations = (
    self.get_queryset()
    .select_related("student")
    .annotate(
        ticket_created_at=Subquery(
            open_ticket_subquery.values("created_at")[:1]
        )
    )
    .exclude(ticket_created_at=None)
    .annotate(interactions_since_ticket=Count('interactions', filter=Q(interactions__when__gte=ticket_created_at)))
    .filter(interactions_since_ticket=1)

Это не работает, потому что я не могу понять, как использовать ticket_created_at в последующей аннотации.

Вернуться на верх