1

どうすればいいですか:

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

結果は常に 1 つの結果になります。

ここでtry/exceptルートを使用することになりました:

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

1 に答える 1

1

なぜ単純にしないのですか:

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

リストが返されるため、これは機能するはずfilterです。エントリが一致しない場合は空のリストが返されます。空のリストは、Python のブール論理で false と評価されます。たとえば、実行してみてください。

print [] or "hello"

(念の為、比較してみprint ["Hi"] or "hello"ます)

したがって、最初のクエリが空の場合、2 番目のクエリが実行されます。ただし、最初のクエリが何かに一致する場合、これが結果になり、2 番目のクエリは無視されます。

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

于 2012-05-10T20:49:11.133 に答える