Django - 如何在字段上的不同之后获得最大值

时间:2017-08-29 13:33:02

标签: django postgresql distinct annotate

我有这些模特:

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)。

1 个答案:

答案 0 :(得分:0)

你可以尝试这样吗

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

我认为它必须正常工作