[django] 404를 반환하지 않고 django 뷰에 객체가 있는지 확인하는 올바른 방법은 무엇입니까?

개체가 있는지 확인하고 개체를 반환 한 다음 해당 작업을 수행합니다. 404를 반환하지 않고 수행하는 올바른 방법은 무엇입니까?

try:
    listing = RealEstateListing.objects.get(slug_url = slug)
except:
    listing = None

if listing:



답변

404가 주어지지 않으면 404 래퍼를 사용하지 않을 것입니다. 그것은 의도의 오용입니다. 대신 DoesNotExist를 잡으십시오.

try:
    listing = RealEstateListing.objects.get(slug_url=slug)
except RealEstateListing.DoesNotExist:
    listing = None


답변

다음을 수행 할 수도 있습니다.

if not RealEstateListing.objects.filter(slug_url=slug).exists():
    # do stuff...

때로는 try: except:블록 을 사용하는 것이 더 명확하고 한 줄로 exists()코드를 더 명확하게 보이게하는 경우도 있습니다. 모두 애플리케이션 논리에 따라 다릅니다.


답변

listing = RealEstateListing.objects.filter(slug_url=slug).first()


답변

다음과 같이 간단하게 할 것입니다.

listing = RealEstateListing.objects.filter(slug_url=slug)
if listing:
    # do stuff

try / catch가 필요하지 않습니다. 결과에 잠재적으로 여러 객체가있는 경우 사용자 Henrik Heino가 표시 한 것처럼 first ()를 사용하십시오.


답변