如何按外键字段排序查询集而不重复



我有Django模型Ticket和Confirmations:

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

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

我想在确认的截止日期前订购,这是有效的,但如果票证有多个确认,那么它将在查询集中多次返回:

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')

最新更新