MySQL の GROUP_CONCAT 関数は、複数の行ベースの値の連結を可能にする強力なツールです。グループ化基準について。これは、データを集計して値のカンマ区切りリストを作成する場合に便利です。 Django には、GROUP_CONCAT に相当する組み込み関数はありませんが、カスタム集計関数を使用して同様の機能を実現できます。
カスタム集計関数を作成するにはGROUP_CONCAT の動作を複製するため、Django ORM の Aggregate クラスを活用できます。このクラスを使用すると、クエリで使用できるカスタム集計関数を定義できます。
from django.db.models import Aggregate class Concat(Aggregate): function = 'GROUP_CONCAT' template = '%(function)s(%(distinct)s%(expressions)s)' def __init__(self, expression, distinct=False, **extra): super(Concat, self).__init__( expression, distinct='DISTINCT ' if distinct else '', output_field=CharField(), **extra)
このカスタム集計関数では、関数属性が 'GROUP_CONCAT' に設定され、必要な集計のタイプを指定します。実行する。 template 属性は、出力文字列の形式を定義します。この場合、これは標準の GROUP_CONCAT テンプレートです。
カスタム集計関数を定義したら、次を使用できます。これを Django クエリで値を連結します:
query_set = Fruits.objects.values('type').annotate(count=Count('type'), name = Concat('name')).order_by('-count')
ここでは、注釈を使用しています。 Concat 集計関数を名前フィールドに適用するメソッド。結果のクエリセットには辞書のリストが含まれます。各辞書は一意のタイプを表し、出現回数とカンマ区切りの名前の文字列が含まれます。
以上がDjango で MySQL の GROUP_CONCAT 機能を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。