개체가 있는지 확인하고 개체를 반환 한 다음 해당 작업을 수행합니다. 404를 반환하지 않고 수행하는 올바른 방법은 무엇입니까?
try:
listing = RealEstateListing.objects.get(slug_url = slug)
except:
listing = None
if listing:
개체가 있는지 확인하고 개체를 반환 한 다음 해당 작업을 수행합니다. 404를 반환하지 않고 수행하는 올바른 방법은 무엇입니까?
try:
listing = RealEstateListing.objects.get(slug_url = slug)
except:
listing = None
if listing:
if listing:
을해야한다 else:
.
답변:
404가 주어지지 않으면 404 래퍼를 사용하지 않을 것입니다. 그것은 의도의 오용입니다. 대신 DoesNotExist를 잡으십시오.
try:
listing = RealEstateListing.objects.get(slug_url=slug)
except RealEstateListing.DoesNotExist:
listing = None
exists()
개체로 무언가를해야하는 경우 보다 더 잘 작동 합니다.
values_list('id', flat=True)
. 내가 존재하는 경우 단지 볼 필요가있는 경우listing = RealEstateListing.objects.values_list('id', flat=True).get(slug_url=slug)
RealEstateListing.DoesNotExist
은 객체 자체가 아니라 모델을 참조한다는 것입니다. 왜 그렇지 RealEstateListing.objects.get(slug_url=slug).DoesNotExist
않습니까?
다음을 수행 할 수도 있습니다.
if not RealEstateListing.objects.filter(slug_url=slug).exists():
# do stuff...
때로는 try: except:
블록 을 사용하는 것이 더 명확하고 한 줄로 exists()
코드를 더 명확하게 보이게하는 경우도 있습니다. 모두 애플리케이션 논리에 따라 다릅니다.
exists()
작동하지 않는다고 가정하고 get()
있습니다.
get()
나중에 수행 하면 데이터베이스에 두 번째 쿼리를 보냅니다.
try-except
이상 exists()
.
listing = RealEstateListing.objects.filter(slug_url=slug).first()
if listing:
.exists()
. 나는 일을하는 방법에 대해 여러 가지 다른 답변을 갖는 것이 좋은 생각이라고 생각합니다. 객체가 존재하는 경우에도 사용하려는 사람들에게이 방법이 더 좋습니다. 나는 시도 / 예외를 피해야하는지 여부에 관계없이 어떤 규칙도 만들지 않을 것입니다. 예를 들어 매우 간결한 코드를 만들고 싶은 경우에는 때로는 좋지만 때로는 좋지 않습니다.