2017-08-29 34 views
0

最大值我有那些机型:Django的 - 如何后明显得到场

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( ' - 价格'),以获得最大的,但它首先下令按日期,所以没用。

任何建议如何做到这一点没有多个查询和令人讨厌的循环?


编辑: 为了使事情变得更加清晰,这里是一个价格表的样本:

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 

行128157198244是每个商店的最新更新。 我想获得这些行的最高价格(4.360)和平均值(3.659)。

回答

0

你好你可以试试这样

Price.objects.filter(product__id=42).order_by('store','-date').annotate(max_value=Max('price', distinct = True)) 

我认为它必须工作

+0

我不明白这应该是如何工作的。 运行时所得到的全部价格均为本产品的所有价格,其中列“max_price”包含每行的价格。 – user1557330