воскресенье, 27 ноября 2011 г.

Django: лимитированные запросы - не забываем про исключения


Для того, чтобы составить лимитированный запрос средствами Django используется нотация доступа к элементам массива.
Например, нам нужно получить ближайшее событие. Для этого список событий надо осортировать, выбрать только те, дата которых больше текущей и вернуть событие с наименьшей датой.


event = Event.objects.order_by('date').filter(date__gte=datetime.datetime.now())[0]



[0] - как раз и отвечает за лимитирование.

Но здесь есть небольшой подводный камушек. Результат этого вызова нельзя сразу передавать в шаблон. Потому что , если событий , соответствующих такому критерию не будет найдено , возникнет исключение IndexOutOfRange.
Избежать 500-ток или дебаг-страниц можно просто:


try:
  event = Event.objects.order_by('date').filter(date__gte=datetime.datetime.now())[0]
except:
  event = None


Комментариев нет:

Отправить комментарий

Если Вы нашли ошибку у автора, у Вас есть вопрос или просто хотите поделиться чем-то полезным, то пишите - не стесняйтесь..