私は異なる外部キーのリストを取得しようとし、これを書きました:
my_ids = Entity.objects.values('foreign_key').distinct()
しかし、UNDISTINCT外部キーのリストだけが表示されます...何が欠けていますか?
ありがとう!
ヒントは以上です!両方のソリューションは100%動作しません...しかし、私はそれらを組み合わせました:)
MySQLデータベースでは、distinctに引数を渡しても機能しません(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()
順不同で機能しない明確な
Order_by()呼び出しで使用されるフィールドは、SQL SELECT列に含まれます。 distinct()と組み合わせて使用すると、予期しない結果になる場合があります。関連モデルのフィールドで並べ替えると、それらのフィールドが選択した列に追加され、重複した行が明確に表示される場合があります。返された結果には余分な列が表示されないため(順序をサポートするためだけにあります)、明確でない結果が返されているように見える場合があります。
同様に、values()クエリを使用して選択した列を制限する場合、order_by()(またはデフォルトのモデル順序)で使用される列が引き続き関与し、結果の一意性に影響を与える可能性があります。
ここでの教訓は、distinct()を使用している場合は、関連するモデルによる順序付けに注意することです。同様に、distinct()とvalues()を一緒に使用する場合は、values()呼び出しにないフィールドで並べ替えるときに注意してください。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct
_Entity.objects.order_by('foreign_key').distinct('foreign_key')
_
既にリストとして持っている場合は、それをset()
に変換して個別の値を取得します。