Могу ли я использовать аннотированный параметр подзапроса позже в том же запросе?
У меня есть 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
в последующей аннотации.