假设我有这样的模型:
class Product(models.Model):
name = models.CharField(max_length=50)
class Sale(models.Model):
product = models.ForeignKey(Product)
sale_date = models.DateField()
我想要获取每个产品的最新销售。最新指的是最新的销售日期。同时,在同一个查询中,我还想要获取每个产品的销售数量。
从SQL角度来看,我需要按product_id进行分组,以计算每个产品的销售量(即每个组的长度)。也许还需要按日期排序(在每个组内部)才能仅获取最新的产品销售情况。
通过django ORM,我意识到我需要以某种方式使用annotate(),也许结合values()使用。但我仍然没有搞清楚如何做到这一点。
假设我有这个products表:
| id | name |
===================
| 1 | Book |
| 2 | Telephone |
还有这个销售表格:
| id | product_id | sale_date |
=================================
| 1 | 1 | 05-02-2015 |
| 2 | 2 | 04-02-2015 |
| 3 | 2 | 03-02-2015 |
| 4 | 1 | 06-02-2015 |
| 5 | 1 | 01-02-2015 |
我希望获得以下输出:
| product_id | name | sale_date | num_sales |
====================================================
| 1 | Book | 06-02-2015 | 3 |
| 2 | Telephone | 04-02-2015 | 2 |
由于06-02-2015是product_id=1(图书)的最新销售日期,而04-02-2015是product_id=2(电话)的最新日期。
all
不是必需的,因为QuerySet对象是可迭代的,但是最近我一直在编写太多的SQLAlchemy。我不认为这会有什么损失,让它存在那里。 - Two-Bit Alchemist