web-dev-qa-db-ja.com

Django Model-個別の値リストを取得

私は異なる外部キーのリストを取得しようとし、これを書きました:

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

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

ありがとう!

54
Ron

ヒントは以上です!両方のソリューションは100%動作しません...しかし、私はそれらを組み合わせました:)

MySQLデータベースでは、distinctに引数を渡しても機能しません(afaik)

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

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

とにかくありがとう :)

41
Ron

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

Entity.objects.order_by().values_list('foreign_key', flat=True).distinct()
39
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

23
Sarath Ak
_Entity.objects.order_by('foreign_key').distinct('foreign_key')
_

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

5
Burhan Khalid