Django2 上的总和

Aggregate Sum on Django2

我有 2 个 table。 Table阿是

+--+------------------+ 
| ID |    Fastivalname    |
+--+------------------+ 
| 1   |    2020Xmas   |
+--+------------------+ 
| 2  |     2019Xmas    |
+--+------------------+ 
| 3 | 2020Thanksgiving |
+--+------------------+ 
| 4 | 2019Thanksgiving |
+--+—————————+ 

Fastival 是 table B 的外键,table B 是

+--+------------------+ ------------------+------------------+
| ID |    fastival_name_id    |        money   |        useofmoney    |
+--+------------------+ ------------------+------------------+
| 1   |        1         |     100        |              game
+--+------------------+ ------------------+------------------+
| 2  |         1        |      20         |              clothes
+--+------------------+ ------------------+------------------+
| 3 |          3        |    50           |              food
+--+------------------+ ------------------+------------------+
| 4 |         4         |      10         |              game
+--+------------------+ ------------------+—————————+
| 1   |         2       |      30         |              food
+--+------------------+ ------------------+------------------+
| 2  |         3        |      15         |              game
+--+------------------+ ------------------+—————————+

和models.py是:

class TableA(models.Model):
    Fastivalname = models.CharField(max_length=50)

class TableB(models.Model):
    fastival_name = models.ForeignKey(to=TableA, related_name="TableA_Fastival_name", on_delete=models.CASCADE)
    money = models.IntegerField(default=0)
    useofmoney = models.CharField(max_length=200, null=True, blank=True) 

请告诉我如何在 Django2 中获取“game of 2020xxx 的金额”?

我试过了context["money"] = TableB.objects.filter(fastival_id=TableA.objects.filter(Fastivalname__startswith=2020.values('id')[0]['id']).filter(useofmoney="game").aggregate(Sum('money'))['money']。但是那个回应“None”...

您可以通过对 TableB 的单个查询来执行此操作,并使用双下划线语法对相关的 models/tables

执行 joins/filters
TableB.objects.filter(
    fastival__Fastival__startswith='2020',
    useofmoney='game'
).aggregate(total=Sum('money'))['total']