我在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
我最终想要的是一种为每个amount
获取与最新date
相对应的category
的总和的方法。为了说明:
date
1的最新category_id
是2018-02-01,其中amount
是50; date
2的最新category_id
是2018-04-01,其中amount
是4000; date
最近的category_id
是2018-06-01,其中amount
是1; 我试图弄清楚如何通过对该查询集的聚集调用来获取值4051。我已经尝试过我能想到的“值”,“注释”和“汇总”的每种组合,但没有任何方法能获得理想的结果。以下内容为我提供了每个category
的最新日期,但是每次我尝试获取相应的amount
的总和时,都会在每 {{1} },而不仅仅是最大值。
amount
我正在尝试通过Django的ORM做什么?我发布了另一个有关此确切示例的MySQL语法的问题,但也无法将其应用于Django查询集。
任何指导表示赞赏。
答案 0 :(得分:0)
我认为您需要一些数据结构来实现此目标,如果Djnago ORM或sql不能满足您的要求(无法编写),请看下面的答案
l=[]
x=MyTable.objects.values('category').annotate(date=Max('date'))
for y in x:
qq= MyTable.objects.get(category_id=y.get(category),date=y.get(date))
l=l+qq.amount
total_amount = sum(l)
print(total_amount)