1

我该怎么做:

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

结果将始终产生一个结果。

我最终在这里使用了 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"

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

附录:结果将是列表类型 - 您需要使用result[0].

于 2012-05-10T20:49:11.133 回答