Часто мне хочется получить первый объект из набора запросов в Django или вернуть None
, если его нет. Есть много способов сделать это, и все они работают. Но мне интересно, какая из них самая эффективная.
qs = MyModel.objects.filter(blah = blah)
if qs.count() > 0:
return qs[0]
else:
return None
Приводит ли это к двум вызовам базы данных? Это кажется расточительным. Это быстрее?
qs = MyModel.objects.filter(blah = blah)
if len(qs) > 0:
return qs[0]
else:
return None
Другой вариант:
qs = MyModel.objects.filter(blah = blah)
try:
return qs[0]
except IndexError:
return None
Это генерирует единственный вызов базы данных, что хорошо. Но часто требует создания объекта исключения,
Этот небольшой инструмент предназначен для увеличения версии приложения каждый раз, когда Visual Studio собирает его, и я знаю, что существует множество инструментов для этого.