gpt4 book ai didi

django 获取每个组的最新信息,按外键分组

转载 作者:行者123 更新时间:2023-12-04 21:40:16 27 4
gpt4 key购买 nike

假设我有类似这些模型的东西:

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() 结合使用.但是我还没想好怎么做。

假设我有这个 产品 table :
| id |   name    |    
===================
| 1 | Book |
| 2 | Telephone |

还有这个 销售 table :
| 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(电话)的最晚销售日期。

最佳答案

from django.db.models import Count, Max
query = Product.objects.annotate(num_sales=Count('sale'))
query = query.annotate(latest_sale_date=Max('sale__sale_date'))
for prod in query.all():
print (prod.pk, prod.name, prod.latest_sale_date, prod.num_sales)

你会得到如下输出:
(1, u'Book', datetime.date(2015, 6, 2), 3)
(2, u'Telephone', datetime.date(2015, 4, 2), 2)

类似于您在问题中的预期输出。请注意,您传递给 annotate 的任何 kwarg 都会成为查询结果的一个属性。

关于django 获取每个组的最新信息,按外键分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28355106/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com