Django:根据相关集注释值

时间:2018-12-28 01:09:42

标签: python django django-orm

我正在寻找一种方法来注释聚合的过滤相关集合的值。

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中完成?

1 个答案:

答案 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