0

我有以下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
)
4

0 回答 0