У меня были дебаты об этом с некоторыми коллегами. Есть ли предпочтительный способ получить объект в Django, если вы ожидаете только одного?Фильтр Django против получения для одного объекта?
Два очевидных способа являются:
try:
obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
# we have no object! do something
pass
и
objs = MyModel.objects.filter(id=1)
if len(objs) == 1:
obj = objs[0]
else:
# we have no object! do something
pass
Первый метод кажется поведенчески более правильным, но использует исключения в потоке управления, который может ввести некоторые накладные расходы. Второй - более круговой, но никогда не будет создавать исключение.
Любые мысли, какие из них предпочтительнее? Что более эффективно?
Нет опыта с Django, но по-прежнему на месте. Явно, красно и безопасно по умолчанию, являются хорошими принципами независимо от языка или структуры. – nevelis