如何按外键字段排序查询集而不重复?
How to order queryset by foreign key field without duplicates?
我有 Django 模型票证和确认:
class Ticket(Model):
name = models.TextField()
class Confirmation(Model):
ticket = models.ForeignKey(
"ticket.Ticket",
related_name="confirmations",
)
expire_date = models.DateTimeField()
我想在确认的过期日期之前订购它们,它有效,但如果票有多个确认,那么它会在查询集中多次 returned:
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
我不想 return 重复。我只需要第一个元素并摆脱其余部分。我需要考虑最新的回复确认。
您应该使用最长的确认日期,因此:
from django.db.models import Max
tickets = Ticket.objects.alias(
<strong>latest_confirmation=Max('confirmations__expire_date')</strong>
).order_by(<strong>'latest_confirmation'</strong>)
我有 Django 模型票证和确认:
class Ticket(Model):
name = models.TextField()
class Confirmation(Model):
ticket = models.ForeignKey(
"ticket.Ticket",
related_name="confirmations",
)
expire_date = models.DateTimeField()
我想在确认的过期日期之前订购它们,它有效,但如果票有多个确认,那么它会在查询集中多次 returned:
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
我不想 return 重复。我只需要第一个元素并摆脱其余部分。我需要考虑最新的回复确认。
您应该使用最长的确认日期,因此:
from django.db.models import Max
tickets = Ticket.objects.alias(
<strong>latest_confirmation=Max('confirmations__expire_date')</strong>
).order_by(<strong>'latest_confirmation'</strong>)