2017-12-15 6 views
0

マイモデル表作成extrarowが

col_1 col_2 col_3 
################## 
1  a  3 
2  b  5 
3  c  6 

私は私が持っているview.py

results = Item.all() 

for result in results 
    total=+ result.col_3 

で行ったクエリセットの合計= 14モデル法の総を通して同じ行うにはどのように

() ?

私は意味:あなたはDjangoのORMで提供集計方法を使用する場合results.total()は14

+0

私は完全に分かりません。あなたのモデルを見せていただけますか? あなたはそれを解決することができるモデルに適切なメソッドを追加することができます – Lemayzeur

答えて

0

オーケーを返します、それはかなり簡単です。また、私はそれがPython forループより高速であることに注意したい。

from django.db.models import Sum 

queryset = Item.objects.all() # you can filter queryset if needed 
result = queryset.aggregate(Sum("col_3")) 
print(result.get("col_3__sum")) # will return the sum value 

それが役に立てば幸い、またdocs

NOTE(パフォーマンス上の) をご覧ください質問は:「集計は、質問の仕方を使用するよりも高速ですか?」

すべての最初は、あなたがこの時間データベース接続が開かれていないと、クエリが実行されません(see the docs)で

Item.objects.all() 

を書くときに何が起こるか、物事を明確にしましょう。 forループを使用しているときのdocに基づいて、クエリーセットが評価されるのはその時です。

一方、集約を使用する場合、dbは1回だけヒットし、計算はdb側で実行されます(これは古くは一般的に1点です)。

あなたの疑問をクリアすることを願っています。

+0

私のターゲットは高速です。実際には、より速く低コストの方法を探しています。私はダブルクエリを必要とする場合、それは速くなります:最初のデータ、2番目またはagregate? – Malenkymuk

+0

大丈夫です。考えてみましょう:forループを使用しているときに、データを取得しています(実際にはフェッチしない、クエリを作成する、ドキュメントを参照する...)。 forループを実行します(forループ実データのフェッチが実行されます)。一方、集計を使用すると、SQLで直接操作が実行されます。これは、すべてのデータをフェッチしてから(必要でないすべてのフィールドを使用)、ループ処理を実行するよりも高速です。 希望、私はあなたのために物をクリアしました –

+0

Ok。私はそのクエリがクエリを設定していないことを知っています。 – Malenkymuk

関連する問題