個別の外部キーのリストを取得しようとしましたが、次のように記述しました。
my_ids = Entity.objects.values('foreign_key').distinct()
しかし、不明な外部キーのリストだけが表示されます...何が欠けていますか?
ありがとう!
個別の外部キーのリストを取得しようとしましたが、次のように記述しました。
my_ids = Entity.objects.values('foreign_key').distinct()
しかし、不明な外部キーのリストだけが表示されます...何が欠けていますか?
ありがとう!
引数をdistinctに渡すことは、MySQLデータベース(AFAIK)では機能しません
これは機能し、1つのオブジェクトのみを返します。
Entity.objects.order_by('foreign_key').values('foreign_key').distinct()
おそらくあなたはこれで行きたいかもしれません:
Entity.objects.order_by().values_list('foreign_key', flat=True).distinct()
Entity.objects.values_list('foreign_key', flat=True).distinct().order_by()
distinct
Djangoのドキュメントで説明されているように、なしorder_by
では機能しません:
呼び出しで使用されるすべてのフィールド
order_by()
は、SQLSELECT
列に含まれます。これをと組み合わせて使用すると、予期しない結果が生じる場合がありdistinct()
ます。関連するモデルのフィールドで並べ替えると、それらのフィールドが選択した列に追加され、重複した行が区別されて見える場合があります。返される結果には余分な列が表示されないため(順序付けをサポートするためにのみ存在します)、不明瞭な結果が返されているように見える場合があります。同様に、
values()
クエリを使用して選択した列を制限する場合、任意のorder_by()
(またはデフォルトのモデルの順序)で使用される列は引き続き関与し、結果の一意性に影響を与える可能性があります。ここでの教訓は、使用している場合は
distinct()
、関連するモデルによる順序付けに注意することです。同様に、一緒に使用するdistinct()
場合 は、呼び出しvalues()
に含まれていないフィールドで並べ替える場合は注意が必要 です。values()
Entity.objects.order_by('foreign_key').distinct('foreign_key')
すでにリストとして持っている場合は、それをaに変換してset()
、個別の値を取得します。