2012-05-10 3 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 возвращает список - и пустой список, если нет запись соответствует. Пустой список вычисляет значение false в логической логике python, например. попробуйте запустить:

print [] or "hello" 

(Подобно тому, как чек, сравнить print ["Hi"] or "hello")

Таким образом, если первый запрос возвращает пустой, второй будет запускаться. Однако, если первое соответствует чему-либо, это будет результат, а второй запрос будет проигнорирован.

Приложение: результат будет иметь тип списка - вам нужно будет извлечь элемент (один и тот же) с помощью result[0].

Смежные вопросы