我正在寻找一种方法来注释聚合的过滤相关集合的值。
class Location(...
...
class Ticket(...
location = ForeignKey(Location...)
date = ...
price = ...
我需要注释日期范围内的最高票价。
因此,如果我仅设置最近30天,它将返回我所有的Location
对象,并且每个对象都有'max_price'注释,该注释等于最近30天的门票最高价格。
门票:
<Ticket France 100 now-50days>
<Ticket France 200 now-20days->
<Ticket France 300 now-20days>
<Ticket Austria 200 now-10days>
<Ticket Austria 50 now-10days>
在这种情况下,queryset返回:
<Location France> + annotated 200
<Location Austria> + annotated 50
是否可以在一个Query
中完成?
答案 0 :(得分:0)
这应该可以解决问题:
from django.db.models import Case, Max, Q
date = datetime.datetime.today() - datetime.timedelta(days=30)
events = Locations.objects.annotate(
max_price=Max('ticket_set__price', filter=Q(ticket_set__date__gte=date))
)
请注意,我在这里使用ticket_set
是因为我不知道您的外键上是否有related_name
。如果您确实有一个类似tickets
之类的相关名称,请使用该名称而不是ticket_set
。