나는 동료들과 이것에 대해 토론하고 있었다. 장고에서 객체를 하나만 기대할 때 선호하는 방법이 있습니까?
두 가지 확실한 방법은 다음과 같습니다.
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
첫 번째 방법은 동작이 더 정확 해 보이지만 제어 흐름에서 예외를 사용하여 오버 헤드가 발생할 수 있습니다. 두 번째는 더 우회하지만 예외는 발생하지 않습니다.
이 중 어느 쪽이 바람직한 지 생각하십니까? 어느 것이 더 효율적입니까?
QS.get()
좋습니다. 2. 세부 사항 : "하나만 기대하는 것"은 항상 0-1 개의 개체를 의미합니까, 아니면 2 개 이상의 개체를 가질 수 있으며이 경우도 처리해야합니다 (이 경우len(objs)
에는 끔찍한 아이디어 임)? 3. 벤치 마크없이 오버 헤드에 대해 아무 것도 가정하지 마십시오 (이 경우try/except
전화의 절반 이상이 무언가를 반환하는 한 더 빠를 것이라고 생각합니다 )