2017-08-29 4 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() 

製品テーブルは、一部の製品(...)を含んを

と価格表には、毎回更新を取得店舗は製品価格を変更します。

私はすべての店舗から最新の価格(「現在の価格」)を取得し、各製品の最大値と平均値を取得したいと考えています。

私は1つの製品のために最初にそれを試してみました:私もORDER_BYを追加しようとしました

NotImplementedError: annotate() + distinct(fields) is not implemented. 

- 最大値を取得するために( '価格')が、それは最初の注文:

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

けどましたそれは役に立たない。

どのように複数のクエリや厄介なループなしでそれを行うにはどうすればよいですか?


EDIT: は、物事をより明確にするために、ここでの価格表のサンプルは次のとおりです。

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

のように試すことができます

答えて

0

私はこれがどのように動作するかを理解することはできません、それは

+0

作業しなければならないと思います。 これを実行すると、この製品のすべての価格が各行の価格を保持する「max_price」列に表示されます。 – user1557330

関連する問題