
[英]Django ORM: Get maximum value of a field with corresponding other fields values
[英]Django - How to get the maximum value after distinct on fields
我有那些模型:
class Product(models.Model):
name = CharField(max_length=128)
other_fields...
class Price(models.Model):
product = ForeignKey(Product)
store = CharField(max_length=128)
price = DecimalField(max_digits=10, decimal_places=2)
date = DateField()
产品表包含一些产品(...)
每次商店更改产品价格时,价格表都会更新。
我想从每个商店获取最新价格(“当前价格”),然后获取每个产品的最高价格和平均价格。
我首先尝试了一种产品:
Price.objects.filter(product__id=42).order_by('store','-date').distinct('store').annotate(Max('price'))
但得到:
NotImplementedError: annotate() + distinct(fields) is not implemented.
我还尝试添加order_by('-price')以获得最大值,但它先按日期排序,所以它没有用。
任何建议如何在没有多个查询和令人讨厌的循环的情况下做到这一点?
编辑:为了使事情更清楚,这是价格表的示例:
id | date | store | price | product_id
-----+-------------------------------+-------------+-------+------------
107 | 2017-08-20 00:36:21+03 | shufersal | 3.510 | 51
128 | 2017-08-20 01:57:07+03 | shufersal | 4.360 | 51
154 | 2017-08-20 01:58:04+03 | mega | 3.900 | 51
157 | 2017-08-23 15:15:03+03 | mega | 3.220 | 51
189 | 2017-08-23 15:15:03+03 | tivtaam | 3.480 | 51
198 | 2017-08-23 15:40:42+03 | tivtaam | 3.510 | 51
219 | 2017-08-23 20:41:22+03 | ramilevi | 4.500 | 51
244 | 2017-08-23 21:17:54+03 | ramilevi | 3.545 | 51
第128,157,198,244行是每个商店的最新更新。 我想获得这些行的最高价格(4.360)和平均价格(3.659)。
嗨,你可以这样尝试吗
Price.objects.filter(product__id=42).order_by('store','-date').annotate(max_value=Max('price', distinct = True))
我认为它一定可以正常工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.