2016-07-05 12 views
0
ジャンゴ、MySQLのセットアップ次のクエリ

Djangoのクエリ:|「= Q(名OR演算子は、1つのレコードのみ

データ= Recording.objects.get(Q(名= 'XYZ')で

を返す必要がありますデフォルト "))

両方xyzdefaultレコードとしてこのスローMultipleObjectsReturnedはDBに存在しているとMySQLはOR operationクエリの両方のオブジェクトを返します。 (これは正しいMySQLの動作です)

DBにレコードが両方とも存在する場合でも、上記のクエリは1つのオブジェクトだけを返すDjango/MySQLには方法がありますか?

:拘束のみ1クエリがデータをフェッチすると、クエリが(すなわちXYZ)特定のオブジェクトを返す必要があります使用されなければならないですfirst.onlyそれが存在しない場合defaultオブジェクトは

+0

複数のものが見つかったときに戻ってほしいものは何ですか? – Sayse

+0

@sayse私は特定の(つまりxyz)オブジェクトが必要なときにそれが存在するときだけ、それが存在しないときだけデフォルトオブジェクトをしたい。 – Crazyshezy

答えて

1

.getを返されなければなりませんあなたが気付いたように、単一のレコードを取得するために使用する必要があります。それ以外の場合はfilterを使用してください:1つの問題は、順序を調整するためにorder_byを使用

data = Recording.objects.filter(Q(name='xyz') | Q(name="default")).first() 

いる場合。

また、使用することができます実質的に同じである

data = Recording.objects.filter(Q(name='xyz') | Q(name="default"))[0] 

。詳細はDjango docsを参照してください。

+0

[0]要素は何でもかまいません 'xyz'または 'default'、 'xyz'がある場合はそれを返します。さもなければ私にデフォルトobjを与えてください。 – Crazyshezy

+0

私が言ったように、 'order_by'を使って、どちらから最初に来るかを制御します。 – Wtower