2015-12-14 15 views
6

でジャンゴでの最新のエントリを取得します。私は次のようになりますDjangoのモデルを持っている複数の次元

class MyModel(Model): 
    field_1 = IntegerField() 
    field_2 = IntegerField() 
    field_3 = IntegerField() 
    value = IntegerField() 
    time_stamp = DateTimeField() 

私は(field1, field2, field3)タプルの組み合わせの全てのセットの最新のエントリを見つけ、の値を取得したいですその行のvalue

Field1, Field2, Field3, TimeStamp, Value 
1  , 1  , 1  , 1/1/2015 , 1 
1  , 1  , 1  , 1/2/2015 , 2 
1  , 1  , 2  , 1/1/2015 , 3 
2  , 2  , 2  , 1/1/2015 , 4 

私は明らかのような何かを行うことができ、私のクエリの結果は、2,3,4-

を返すようにしたいでしょう:たとえば
は、テーブルには、次の行を持っているだろうと言うことができます:

dims = MyModel.objects.values('field1', 'field2', 'field3').distinct() 
for dim in dims: 
    row = MyModel.objects.filter(**dim).latest('time_stamp') 
    value = row.value 

しかしDBの多くは当たるようにそれは、そこに少ないタッチでこれを行う方法ですか?

+0

これはうまくいかないかもしれませんが、 'MyModel.objects.values( 'field_1'、 'field_2'、 'field_3')。お返事のための –

+0

@ShangWangのおかげで、私は(たぶん)私の質問をより明確にするために編集した、どのように私はあなたの方法で、各行の[値]を保存することができますか?あなたは何を意味する – sedavidw

+0

'各row'の値を​​保存しますか?それはあなたが「すべての組み合わせのセット」に言及したものと関係がありますか?または、各レコードのすべてのフィールドを表示したいですか? –

答えて

2

これは、(のPostGreSQLでテスト済み)データベースで一度にそれを行う必要があります。

MyModel.objects.order_by('field_1__pk', 'field_2__pk', 'field_3__pk', '-time_stamp') 
.distinct('field_1__pk', 'field_2__pk', 'field_3__pk') 
.values('value') 

order_byグループの同一field_x -tripletsを一緒に最新のtime_stamp最初に、distinctは、それぞれの最初の行のみを選択し、そのような三つ組。これは単純なモデルのために動作しますが、慎重さは一般的に必要とされるorder_bydistinctvaluesを組み合わせるとき:https://docs.djangoproject.com/en/1.9/ref/models/querysets/#django.db.models.query.QuerySet.distinct

EDIT:はフィールドのPK年代を使用するための答えを更新しました。通常の型でないときは、order_byは正常に動作しません。しかし、pkを使うと適切な結果が得られます。

+0

私は「BY式intial ORDERと一致する必要があります表現にDISTINCT SELECT」と言ういくつかのエラーを取得しています。私は同じ注文をしています(あなたがここで行ったようにタイムスタンプは除きます)。どんな入力? – sedavidw

+0

それを稼働させて答えを更新することができました。あなたのチェックはあなたのものです! :) – sedavidw

+0

クール、彼らはIntegerFieldsいないのであれば)ええ、それはもっと複雑です。 – schwobaseggl

関連する問題