2012-05-10 6 views
1

にはどうすればいいだろう。ジャンゴORクエリ

FinancialStatements.objects.get(statement_id=statement_id) 
    or SalesStatements.objects.get(statement_id=statement_id) 

結果は常に1件の結果が得られます。

私はここに、ルート以外/トライを使用して終了:単純にしないのはなぜ

try: 
     statement_object = FinancialStatements.objects.get(statement_id=statement_id) 
    except FinancialStatements.DoesNotExist: 
     statement_object = SalesStatements.objects.get(statement_id=statement_id) 
+1

これらの異なるモデルクラスはありますか?または同じモデルクラス内の行(オブジェクトインスタンス)? –

+0

まだ例外をキャッチしようとしましたか? –

+1

2つの異なるモデルからクエリーセットをORすることはできません。あなたは実際に何を達成しようとしていますか? –

答えて

1

result = (FinancialStatements.objects.filter(statement_id=statement_id) or 
      SalesStatements.objects.filter(statement_id=statement_id)) 

これは動作するはずです、なぜならfilter戻りリスト - と空のリストがない場合エントリが一致します。空リストは、Pythonのブール論理ではfalseと評価されます。実行してみてください:最初のクエリが空を返した場合

print [] or "hello" 

(ジャストチェックとして、​​を比較)

ので、第二は、実行されます。しかし、最初のものが何かにマッチすれば、これが結果になり、2番目のクエリは無視されます。

補題:結果はリストタイプになります - result[0]で(唯一の)要素を抽出する必要があります。