본문 바로가기
DEV/Web 개발

Web 개발 :: django, get_object_or_404, get_list_or_404_TIL#41

by 올커 2022. 10. 31.

■ JITHub 개발일지 41일차

□  TIL(Today I Learned) ::

DRF, get_object_or_404, get_list_or_404

- Problem) 여러 개의 Article을 가져오고 싶은데 objects.all()이 아니라 리턴 결과가 비어있을 경우 404에러를 발생시킬 수 있도록 get_object_or_404를 사용해보려 했다. 저장된 articles를 가져와야하는데 get_object_or_404.all()을 사용하려니 multipleObjectsReturned at  에러가 발생했다.

 

- Reason) 이유를 살펴보니 get_object_or_404는 하나의 object만을 가져올 때 사용하는 모듈이었다. 즉, 여러개의 object들을 호출할 수 없었다.

 

- Solution) 여러 개의 object를 불러오고 싶을 때에는 get_list_or_404를 사용한다.


- Problem) 이상하게도, rest_framework.generic에서는 get_object_or_404 모듈을 import하여 사용할 수 있었는데 get_list_or_404는 import가 불가했다.

 

- Solution) get_list_or_404를 사용할 수 있었던 또 다른 경로는 render나 redirect를 불러올 수 있었던 django의 내장함수인 django.shortcuts에서 가져올 수 있었다.

 

아래와 같이 다시 정리해보았다.

# 임포트하기(1)
from django.shortcuts import get_list_or_404, get_object_or_404

# 임포트하기(2)
from rest_framework.generic import get_object_or_404


article = Article.objects.all()

# 하나만 가져올 때
article = get_object_or_404(Article, id=article_id)

# 여러 개를 가져올 때(전체)
article = get_list_or_404(Article)

 

반응형

댓글