2012-05-10 7 views
1

어떻게 할 것 :장고 또는 쿼리

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

결과는 항상 하나 개의 결과를 얻을 것입니다.

나는 여기에 경로를 제외하고 /를 시도하여 결국 :

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

두 개의 서로 다른 모델의 쿼리 세트를 'OR'할 수 없습니다. 실제로 * 성취하려는 것은 무엇입니까? –

답변

1

이유는 단순히 수행

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

이 작동합니다, filter 때문에 반환 목록 - 목록이 비어없는 경우를 항목이 일치합니다. 비어있는리스트는 파이썬의 불리언 논리에서 거짓으로 평가됩니다. 실행 해보십시오 :

print [] or "hello" 

가 첫 번째 쿼리가 비어 반환하는 경우

그래서, 두 번째는 다음 실행됩니다 (그냥 검사로, print ["Hi"] or "hello" 비교). 그러나 첫 번째 항목과 일치하는 항목이 있으면 결과가되고 두 ​​번째 쿼리는 무시됩니다.

부록 : 결과는 목록 유형이 될 것입니다. result[0]과 함께 (유일한) 요소를 추출해야합니다.