71

個別の外部キーのリストを取得しようとしましたが、次のように記述しました。

my_ids = Entity.objects.values('foreign_key').distinct()

しかし、不明な外部キーのリストだけが表示されます...何が欠けていますか?

ありがとう!

4

4 に答える 4

64

引数をdistinctに渡すことは、MySQLデータベース(AFAIK)では機能しません

これは機能し、1つのオブジェクトのみを返します。

Entity.objects.order_by('foreign_key').values('foreign_key').distinct()

于 2012-06-01T11:15:29.390 に答える
61

おそらくあなたはこれで行きたいかもしれません:

Entity.objects.order_by().values_list('foreign_key', flat=True).distinct()
于 2012-06-01T10:58:04.337 に答える
36
Entity.objects.values_list('foreign_key', flat=True).distinct().order_by()

distinctDjangoのドキュメントで説明されているように、なしorder_byでは機能しません:

呼び出しで使用されるすべてのフィールドorder_by()は、SQLSELECT 列に含まれます。これをと組み合わせて使用​​すると、予期しない結果が生じる場合がありdistinct()ます。関連するモデルのフィールドで並べ替えると、それらのフィールドが選択した列に追加され、重複した行が区別されて見える場合があります。返される結果には余分な列が表示されないため(順序付けをサポートするためにのみ存在します)、不明瞭な結果が返されているように見える場合があります。

同様に、values()クエリを使用して選択した列を制限する場合、任意のorder_by()(またはデフォルトのモデルの順序)で使用される列は引き続き関与し、結果の一意性に影響を与える可能性があります。

ここでの教訓は、使用している場合はdistinct()、関連するモデルによる順序付けに注意することです。同様に、一緒に使用するdistinct()場合 は、呼び出しvalues()に含まれていないフィールドで並べ替える場合は注意が必要 です。values()

于 2016-05-04T11:50:30.143 に答える
9
Entity.objects.order_by('foreign_key').distinct('foreign_key')

すでにリストとして持っている場合は、それをaに変換してset()、個別の値を取得します。

于 2012-06-01T11:00:05.760 に答える