3

トランクバージョンのdjangoでクエリによって単純なグループを作成するにはどうすればよいですか?

私はのようなものが必要です

SELECT name
FROM mytable
GROUP BY name

実際に私がやりたいのは、異なる名前のすべてのエントリを取得することです。

4

3 に答える 3

12

すべての個別の名前が必要な場合は、次のようにします。

Foo.objects.values('name').distinct()

そして、辞書のリストが表示され、それぞれに名前キーが付いています。他のデータが必要な場合は、属性名をパラメーターとして .values() 呼び出しに追加するだけです。もちろん、同じ名前の行間で異なる可能性のある属性を追加すると、.distinct() が壊れます。

完全なモデル オブジェクトを取得したい場合、これは役に立ちません。ただし、個別の名前を取得することと完全なデータを取得することは、本質的に両立しない目標です。与えられた名前のどの行を完全に返したいかをどうやって知るのですか? 特定の名前を持つすべての行の何らかの集計データを計算したい場合、集計サポートが最近 Django トランクに追加され、それを処理できます。

于 2009-01-24T15:37:28.350 に答える
3

クエリセットに .distinct を追加します。

Entries.objects.filter(something='xxx').distinct()
于 2009-01-24T07:04:07.280 に答える
2

すべての行に一意の ID があるため、これは機能しません。したがって、すべてのレコードは異なります..

私が使用した私の問題を解決するために

foo = Foo.objects.all()
foo.query.group_by = ['name']

しかし、これは公式の API ではありません。

于 2009-01-24T07:09:16.550 に答える