django - 按另一个字段的最大值聚合
问题描述
嘿,我有一个名为Visit
. 带字段date
, person
, id
. 我想得到所有在过去三个月内没有访问过的人。你能帮我吗?
到目前为止我所拥有的。结果不是我想看到的。
visits_anotated = Visit \
.objects \
.only('id', 'date', 'person') \
.values('id', 'date', 'person') \
.annotate(latest_visit=Max('date')) \
.filter(latest_visit__lte=datetime.datetime.now() - datetime.timedelta(weeks=14))
解决方案
我不相信你需要为此做一个汇总。您应该能够过滤到过去三个月访问过的人,然后找到所有其他人。
three_months_ago = datetime.datetime.now() - datetime.timedelta(weeks=14)
recent_people = Visit.objects.filter(
date__gte=three_months_ago
).values('person').distinct()
earlier_people = Visit.objects.exclude(
person__in=recent_people
).values('person').distinct()
如果 person 是外键,你可以这样做:
Person.objects.exclude(visit_set__date__gte=three_months_ago).distinct()