Django的 - 如何后明显得到场
问题描述:
最大值我有那些机型: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)。
答
你好你可以试试这样
Price.objects.filter(product__id=42).order_by('store','-date').annotate(max_value=Max('price', distinct = True))
我认为它必须工作
我不明白这应该是如何工作的。 运行时所得到的全部价格均为本产品的所有价格,其中列“max_price”包含每行的价格。 – user1557330