【发布时间】:2018-12-28 03:43:07
【问题描述】:
我在 Django 中使用 MySQL 进行了以下简化设置:
class Category(models.Model):
name = models.CharField(max_length=255)
class MyTable(models.Model):
category = models.ForeignKey('Category', on_delete=models.CASCADE)
date = models.DateField()
amount = models.IntegerField()
class Meta:
unique_together = ['category', 'date']
还有一个查询集,包含MyTable 的以下示例数据:
date category_id amount
2017-12-01 3 2
2018-01-01 1 100
2018-02-01 1 50
2018-03-01 2 2000
2018-04-01 2 4000
2018-05-01 3 2
2018-06-01 3 1
我最终想要的是一种方法来获取与每个category 的最新date 对应的amounts 的总和。举例说明:
-
category_id1 的最新date是 2018-02-01,其中amount是 50; -
category_id2 的最新date是 2018-04-01,其中amount是 4000; -
category_id3 的最新date是 2018-06-01,其中amount是 1; - 50 + 4000 + 1 = 4051
我试图弄清楚如何通过对该查询集的聚合调用来获取值 4051。我已经尝试了我能想到的“值”、“注释”和“聚合”的所有组合,但没有得到想要的结果。以下为我提供了每个 category 的最新日期,但每次我尝试获取相应 amounts 的总和时,它都会在 每个 amount 上计算它,而不仅仅是最大值.
MyTable.objects.values('category').annotate(Max('date'))
我正在尝试通过 Django 的 ORM 来实现吗?我发布了另一个关于这个确切示例的 MySQL 语法是什么的问题,但也无法将其应用于 Django 查询集。
任何指导表示赞赏。
【问题讨论】:
标签: django django-queryset django-orm