Как упорядочить набор запросов по полю внешнего ключа без дубликатов?

У меня есть Django модели Ticket и Confirmations:

class Ticket(Model):
    name = models.TextField()


class Confirmation(Model):
    ticket = models.ForeignKey(
       "ticket.Ticket",
       related_name="confirmations",
    )
    expire_date = models.DateTimeField()

Я хочу упорядочить их по дате истечения срока действия подтверждений, и это работает, но если билет имеет более одного подтверждения, то он будет возвращен в queryset несколько раз:

tickets = Ticket.objects.order_by('confirmations__expire_date')
for ticket in tickets:
   print(f"id: {ticket.id}")
>
id: 1
id: 2
id: 1
id: 3
id: 4
id: 1

Я не хочу возвращать дубликаты. Мне нужен только первый элемент и избавиться от остальных. Мне нужно учесть последнее подтверждение в ответе.

Вы должны работать с наибольшей датой подтверждения, поэтому:

from django.db.models import Max

tickets = Ticket.objects.alias(
    latest_confirmation=Max('confirmations__expire_date')
).order_by('latest_confirmation')
Вернуться на верх