Django - Select_related() 와 values()

이주명·2021년 12월 5일
0
post-custom-banner

select_related() 란?

Django queryset을 이용하여 데이터베이스에서 데이터를 가져올 때
참조된 테이블의 데이터를 같이 가져오려면 select_related()함수를 사용하여 불러 올 수 있다.

예시

Posting model이 다음과 같이 정의되어있다.
user 를 Foreignkey로 갖고 있는 상황

postings = Posting.objects.select_related()

위의 코드로 Posting objects와 참조된 user테이블의 정보를 같이 불러올수 있습니다.

여기서 user 정보를 불러오고 싶다면

for posting in postings :
	posting.user.(불러오고싶은 db컬럼 이름)

이런 방식으로 불러올수 있습니다. postings는 각 posting을 리스트로 갖고 있기때문에 바로

postings.user.(불러오고싶은 db컬럼 이름)

이런 형식으로는 사용 할 수 없습니다.

for 문을 사용하지 않고 바로 꺼낼수 있는 방법은 values()함수를 이용하는 것인데 ! 참조된 정보도 바로 꺼낼수 있습니다!!

그것은!!

(참조된 컬럼이름)__(필요한 데이터이름)

posting = Posting.objects.select_related().values(user__name)

이러한 방법으로 사용한다면 object가 아닌 값을 리스트로 바로 불러오기때문에 for문을 이용하지 않아도 됩니다.

두개의 결과는 같지만 어떻게 코드를 작성하느냐의 차이 인 것 같습니다. 어떤 방법이 효율적인지 고려하여 둘중 하나를 이용하면 좋을 것 같습니다.

profile
oh yeah
post-custom-banner

0개의 댓글