django按外键获取每组最新组
发布时间:2020-12-20 13:47:37 所属栏目:Python 来源:网络整理
导读:假设我有类似这些模型的东西: class Product(models.Model): name = models.CharField(max_length=50)class Sale(models.Model): product = models.ForeignKey(Product) sale_date = models.DateField() 我想获得每种产品的最新销售.最新意味着最新的sale_d
假设我有类似这些模型的东西:
class Product(models.Model): name = models.CharField(max_length=50) class Sale(models.Model): product = models.ForeignKey(Product) sale_date = models.DateField() 我想获得每种产品的最新销售.最新意味着最新的sale_date.此外,在同一个查询中,我想获得每个产品的销售产品数量. 在SQL术语中,我需要按product_id进行分组,以计算每个产品的销售数量(这是每个组的长度).也许还可以按日期(在每个组中)订购,以获得最新的产品销售. 使用django ORM,我意识到我需要以某种方式使用annotate()并且可能与values()结合使用.但我仍然没有想到如何. 假设我有这个产品表: | 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 | 自2015年2月6日起是product_id = 1(Book)的最新销售日期,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',4,2) 类似于你在问题中的预期输出.请注意,无论您传递给注释的kwarg都成为查询结果的属性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |