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문을 이용하지 않아도 됩니다.
두개의 결과는 같지만 어떻게 코드를 작성하느냐의 차이 인 것 같습니다. 어떤 방법이 효율적인지 고려하여 둘중 하나를 이용하면 좋을 것 같습니다.