ホームページ >バックエンド開発 >Python チュートリアル >group_by() を使用せずに Django でクエリ結果をグループ化する方法は?

group_by() を使用せずに Django でクエリ結果をグループ化する方法は?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-04 08:14:121012ブラウズ

How to Group Query Results in Django Without Using group_by()?

Django で GROUP BY を使用したクエリ

データベース モデルをクエリする場合、多くの場合、結果を取得するために特定のフィールドで結果をグループ化する必要があります。集約された情報。 Django では、この機能は group_by メソッドによって直接サポートされていません。ただし、Django コードベースを変更せずに同様の結果を達成する方法は複数あります。

1 つの方法は、Django の集計機能を活用することです。 Count アグリゲーターを使用すると、指定したフィールドごとにグループ化されたフィールドの出現数をカウントできます。たとえば、メンバーを指定ごとにグループ化し、各指定の出現回数をカウントするには:

from django.db.models import Count
result = (Members.objects
    .values('designation')
    .annotate(dcount=Count('designation'))
    .order_by()
)

このクエリは次のような結果を生成します:

[{'designation': 'Salesman', 'dcount': 2}, 
 {'designation': 'Manager', 'dcount': 2}]

値には複数のフィールドを含めることができます。引数を使用して追加情報を返します。例:

    .values('designation', 'first_name', 'last_name')

Django ドキュメントでは、values()、annotate()、および Count 構造に関する広範な情報が提供されています。

  • [Django ドキュメント: value()](https://docs.djangoproject.com/en/stable/ref/models/querysets/#values)
  • [Django ドキュメント: annotate()](https://docs.djangoproject .com/en/stable/ref/models/querysets/#annotate)
  • [Django ドキュメント: Count](https://docs.djangoproject.com/en/stable/ref/models/lookups/#count)

order_by() 引数を除外すると、特にデフォルトの並べ替え動作が望ましくない場合、予期しない結果が生じます。

以上がgroup_by() を使用せずに Django でクエリ結果をグループ化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。