我正在寻找一种方法来注释聚合过滤相关集的值。
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中完成
发布于 2018-12-28 16:55:18
这应该能起到作用:
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。
https://stackoverflow.com/questions/53952609
复制相似问题