Django: как подсчитать количество групп подзапроса?

У меня есть следующие 2 модели:

class User(model.Models):
    username = models.CharField(max_length=20, unique=True)

class Walk(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='walks')
    creation_date = models.DateTimeField(auto_now_add=True)
    distance = models.IntegerField()

Я хочу получить список User и аннотировать среднедневное общее расстояние, пройденное за последние n дней, для каждого пользователя. На первый взгляд это выглядит тривиально, но сделать это в одном запросе, а не внутри цикла - та еще морока. Идеальный запрос выглядит следующим образом: users = User.objects.annotate(average=Subquery(subquery)). Но я не смог справиться с этим и вместо этого хочу сделать два подзапроса: один для общего пройденного расстояния и один для количества отдельных дней. Затем я просто сделаю total_distance / days. Но как мне запросить разные дни?

Вот что у меня есть, что, очевидно, не работает.

subquery = (
    Walk.objects
        .filter(user__pk=OuterRef('pk'), creation_date__gte=start_date)
        .annotate(date=TruncDate('creation_date'))
        .values('date')
        .annotate(sum=Sum('distance'))
)
users = User.objects.annotate(
    total_distance=Sum('walks__distance', filter=Q(walks__user__pk=F('pk'), walks__creation_date__gte=start_date)),
    number_of_distinct_days=subquery
)
Вернуться на верх