ジャンゴ-ORMの集約関数

モデル構造のmodels.py

- * -コーディング:UTF-8 - * - 
から django.db インポートモデル

クラスを著者(models.Model):
     " モデルに" 
    名前 = models.CharField(MAX_LENGTH = 100 
    年齢 = models.IntegerField()
    メール = モデル.EmailField()

    クラスメタは:                  名前を変更することはできません 
        のDB_Table = 作者     デフォルトのパッケージ名は、データベーステーブル名_にマップされているとして、あなたの名前のカスタムデータベースにマッピングされ、これを設定しない


クラスの出版社(models.Model):
     出版モデル= models.CharField(MAX_LENGTH = 300 

    クラスのMeta:
        DB_Tableの = ' 出版社' 

クラスブック(models.Model):
     " ブック模型" 
    名前 = models.CharField(MAX_LENGTH = 300 
    ページ = models.IntegerField()
    価格 = モデル。 FloatField()
    評価 = models.FloatField()
    作者 = models.ForeignKey(著、on_delete = models.CASCADE)
    出版社 = models.ForeignKey(出版社、on_delete = models.CASCADE)

    クラスのMeta: 
        のDB_Table= ' ブック' 


クラスBookOrder(models.Model):
     " 图书订单模型" 
    ブック = models.ForeignKey(" ブック"、on_delete = models.CASCADE)
    価格 = models.FloatField()

    クラスのMeta:
        DB_Tableの = ' book_order '

集計関数

views.pyで

1.Avg:アベレージ

django.shortcuts インポートレンダリング

から django.http インポートのHttpResponse
 から .models インポートから django.db.models 輸入平均
 から django.db インポート接続

DEFの:インデックス(リクエスト)

    #の価格(価格フィールド)は、テーブルの平均化の下で本を取得します。値(平均値) 
    結果= Book.objects.aggregate(平均(価格))  平均直接使用することはできません、それは集約ラップ使用する必要がある
    印刷(結果を)
     印刷(connection.queries)    それはクエリセットの場合は、ビューのSQL文に変換することができ、私たちは、あなたは、クエリのクエリを使用することができ、インポート接続に必要な
    リターンのHttpResponse(インデックス

この時間Djangoは自動的に変更したい場合は、より多くの、フィールド名__Avgで別名を作成し提供します

    この時間Djangoは自動的にもっとして、変更したい場合は、フィールド名__Avgでエイリアスを作成与える 
    結果を= Book.objects.aggregate(price_avg =平均(価格))  平均を直接使用することはできません、これは、集計ラップを使用する必要があります

 

総計で実行される方法、および集約関数注釈

例:この例では、平均する
 すべての値は平均値が(接続モジュールをインポートする必要がある)1.aggregateなります

DEFのインデックス(要求):
結果 = Book.objects(。平均(価格)) #   平均していない直接使用、我々は文言集約ラップの詳細を確認する必要があります1
プリント(結果)#1 2.annotateは、操作をグループ化し、各グループの平均値を求めることにより、追加のグループであろう #は、各グループの平均値を見つける 次いで予約BookOrderに関連付けられたテーブルは(ジャンゴのデフォルトを使用して、小文字)各グループの平均値グループIDに応じて、価格フィールドに配置され、 
書籍= Book.objects.annotataを(price_avg平均=(bookorder__price )) 名前price_avgを変更
するための予約本:印刷' %S /%S '(book.name、book.price_avg)%) 名前の前にprice_avgが変更された、またはデフォルトの平均であります

 (合計を求めている)どのように多くのID、各テーブルを尋ねるカウント

django.http インポートのHttpResponse
 から .models インポート書籍、著者、BookOrder
 から django.db.models インポート平均、カウント
 から django.db インポートコネクション

    合計を求めている各テーブルIDの数(カウント探し1番号)
    #の結果= Book.objects.aggregate(book_numsカウント=( 'ID'))#book_numsカスタムキーパラメータ、ユーザーは返されたデータを受信
    #の印刷を(結果)
    #の印刷(connection.queries)#ビューに変換SQL文の

    #は、どのように多くの異なるメールボックス2で統計著者テーブルを持っている(だけ使用して、であるとき、統計数同じメールボックス、すべてではないが、統計カウント) -である、= Trueの明確な
    結果= Author.objects.aggregate(email_nums =(カウント #email_nums明瞭=真)、[メール]) カスタムキーパラメータ、ユーザーは返されたデータを受信
    #の印刷を(結果)
    #の印刷(connection.queries)#ビューに変換SQL文

    パケットのそれぞれの数をカウントする。3.詳細な注釈(言い換えれば、各ボリュームグループのために必要とされるか、この方法に使用することができるように) 
    書籍= Book.objects.annotate(book_numsカウント=(' bookorder__id '))   bookorderテーブルのidフィールドの下bookorder__idすなわち
    のためのブックでの本:
         印刷' %S / S%"%(book.name、book.book_nums))   使用book_numsのカスタムパラメータその後、このテーブルがあります自動的にこのプロパティを増やします

MaxとMinが指定されたオブジェクト(フィールド)の最大値と最小値を取得します。

django.db.models インポート平均、カウント、最大値、最小

    1 MaxとMinは、指定されたオブジェクト(フィールド)を取得し、最大値と最小値は 
    Author.objects.aggregate(MAX = MAX(=結果' SGEを')分=分(年齢)) ageフィールド著者テーブル内の最大値と最小値、最大値と最小の値を受信するためにカスタマイズされて見つける
    印刷(要求)
     を印刷(connection.queriesを)

同様にパケットは、各書籍の最大値と最小値を求めてannogateを使用することができます

合計:フィールドの合計を見つけます

.models 輸入書籍、著者、BookOrder
 から django.db.models インポートAVG、COUNT、MAX、MIN、和
 自己輸入のリークが、これはただのラフの例の場合は

    すべての書籍の総売上を求めて1、だけでなく、すべての書籍の合計が販売されている
    #は、価格フィールドBookOrder和テーブルの取得結果= BookOrder.objects.aggregate(=合計(「価格」)) 
    印刷(要求)
    #の印刷(connection.queries) 

    2 。注釈を付けることが必要とされるパケット-個別に各書籍の総売上高のために(どのくらい販売する紅楼帳の三国夢とそれぞれの本についてである、されている)を算出 
    ブックス= BookOrder.objects.annotate(合計=合計(bookorder__id ))    bookorder__idのこのフィールドは、パケットを作成し、各パケットの合計金額を計算して、カスタムの総受信を使用する
    ために予約するには本:
         印刷%S%S %(book.name、book.total))    この合計は、上記に定義されている、カスタムは、テーブルに追加された属性の厚さのために良いだろう
    印刷(connection.queries) 

    ここでの唯一のアイデアを提供する-指定した年のシーク3.総売上
    #を初めてクエリ.objects.filterデータテーブル名の指定した年の見直しを取得する前に① 
    、②その後、和を使用して、これらのデータを探し出すことができ、通常の使用そして、集計合計


    与えられた年の総売上高の各書籍の4要件は、あること、三国は2018年に、どのくらいのお金を全部売却し、2015年にどのくらいのお金紅楼夢の合計を販売した
    #のデータの年を取得するために①レビュー時間クエリ.objects.filterテーブル名の前に
    合計を使用して、これらのデータに基づいて、次に②、通常の注釈と和を使用して、見つけることができます

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/ifdashui/p/11914776.html