django按外键获取每组最新组

django按外键获取每组最新组,第1张

概述假设我有类似这些模型的东西: class Product(models.Model): name = models.CharField(max_length=50)class Sale(models.Model): product = models.ForeignKey(Product) sale_date = models.DateField() 我想获得每种产品的最新销售.最新 假设我有类似这些模型的东西:

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,Maxquery = 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都成为查询结果的属性.

总结

以上是内存溢出为你收集整理的django按外键获取每组最新组全部内容,希望文章能够帮你解决django按外键获取每组最新组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存