2013-10-30 16 views
8

に凝集を使用して、私は最小値のフィールド名を取得しますジャンゴ

class Choclate(models.Model): 
    name = models.CharField(max_length=256) 
    price = models.IntegerField() 

ので、私はそうlowest priceを得るために、 をlowest price値を持つフィールド名を取得したいの下のようないくつかのフィールドを持つモデルを持っています値は、我々は、どのようにfield nameを取得するので、最終的には

from django.db.models import Avg, Max, Min 

choclates = Choclate.objects.all() 
lowest_price = choclates.aggregate(Min('price')) 

Aggregationsを使用して以下のように行うことができますジャンゴで最低価格の値に関連していますか?

答えて

8

あなたが望む正確なものを得るために、コードの下にしようとすることができ

>>> from django.db.models import Min 
>>> Choclate.objects.filter().values_list('name').annotate(Min('price')).order_by('price')[0] 
(u'First1', 10) 
>>> 

First1は最も低い値である価格= 10を持つフィールド名です。

+0

kありがとうございます。また、すべての価格の値が等しい場合、4つのchoclateレコードがある場合は、4つのレコードの価格が同じであるかどうかを確認する必要があります。それは可能ですか? –

+0

確かに、私はあなたが私の上記のコメント/疑問を見つけたと思いますか? –

+0

もし私が試してみると、dbからの4つのレコードをすべて取得した後で条件が満たされていれば.iはこれを見つけることができませんでした。 –

1

Minを位置引数として渡すと、フィールドの名前はprice__minになります。それ以外の場合は、キーワード引数、つまりaggregate(my_min=Min('price'))として渡すと、引数と同じ名前(この場合はmy_min)を使用できます。 Docs

関連する問題