我有这些模特:
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)。
答案 0 :(得分:0)
Price.objects.filter(product__id=42).order_by('store','-date').annotate(max_value=Max('price', distinct = True))
我认为它必须正常工作