2012-05-10 36 views
1

我会怎么做:Django的或查询

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

结果将总是产生一个结果。

我最终使用在try /除了途经此地:

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

你不能从两个不同的模型'或'查询集。你究竟在做什么*试图完成什么? –

回答

1

为什么不能简单地做:

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

这应该工作,因为filter返回一个列表 - 和一个空列表,如果没有条目匹配。在python的布尔逻辑中空列表的计算结果为false,例如尝试运行:

print [] or "hello" 

(就像一张支票,比较​​)

所以,如果第一个查询返回空,第二个将被运行。但是,如果第一个匹配任何内容,这将是结果,第二个查询将被忽略。

附录:结果将成为列表类型 - 您需要提取result[0](仅限一个)元素。