selected_related()
- "follows" foreign-key relationships and one to one relationships, selecting additional related-object data when it executes its query
- SQL로 풀어보면 Inner Join을 하여 관련 개체의 필드를 Select 문에 포함시켜서 관련 개체를 얻는다.
- SQL join get result backk as part of the table from SQL server
- SQL의 JOIN을 사용하는 특성상 foreign-key , one-to-one 와 같은 single-valued relationships에서만 사용이 가능하다는 한계가 있다.
Bad Example & Result
Good Example & Result
prefetch_related()
- does a seperate lookup for each realationship and does the "joining" in python (many to many)
- executes another query and reduce redundant columns create and send a list of id's to select back to the service
- 모델별 쿼리를 실행해 쿼리셋을 가져온다.
- foreign-key , one-to-one 뿐만 아니라 many-to-many , many-to-one 등 모든 relationships에서 사용 가능하다.
정참조 Good Example and result
역참조 Good Example and result
병민님 example:
-https://github.com/wecode-bootcamp-korea/queryset-api/tree/main/books
reference :