是否可以聚合查询集的注释?
模型:
class Article(models.Model):
title = models.CharField(max_length=255)
body = models.TextField()
class State(models.Model):
article = Models.ForeignKey(Article)
date = DateField()
views = IntegerField()
downloads = IntegerField()我想做以下几件事:
articles = metrics_models.Article.objects.filter(
state__date__month=month,
state__date__year=year
).annotate(
views=Min('state__views'),
downloads=Min('state__downloads')
).aggregate(
views=Sum('views'),
downloads=Sum('downloads')
)错误:
Exception Type: DatabaseError
Exception Value:
column "downloads" does not exist
LINE 1: SELECT SUM(downloads), SUM(views) FROM (SELECT "metrics_arti...在运行这个程序时,我得到一个DatabaseError,因为django试图对'views‘和'download’数据库列进行聚合,而不是对注释进行聚合。
还有其他方法可以在QuerySet注释上进行这种聚合吗?
发布于 2015-07-14 10:22:16
我认为medmunds是对的,您不能重复使用相同的名称作为注释和聚合别名。这就是你想要做的,我想:
articles = metrics_models.Article.objects.filter(
state__date__month=month,
state__date__year=year
).annotate(
min_views=Min('state__views'),
min_downloads=Min('state__downloads')
).aggregate(
sum_min_views=Sum('min_views'),
sum_min_downloads=Sum('min_downloads')
)发布于 2022-07-25 11:51:57
根据您最初的查询,我认为这是可行的。
from django.db.models import ExpressionWrapper, Min, OuterRef
articles = (
Article.objects.filter(state__date__month=month, state__date__year=year)
.annotate(
views=ExpressionWrapper(
Min(
State.objects.filter(article_id=OuterRef("id")).values_list(
"views", flat=True
)
),
output_field=models.IntegerField(),
),
downloads=ExpressionWrapper(
Min(
State.objects.filter(article_id=OuterRef("id")).values_list(
"downloads", flat=True
)
),
output_field=models.IntegerField(),
),
)
.aggregate(views=Sum("views"), downloads=Sum("downloads"))
)https://stackoverflow.com/questions/30984711
复制相似问题