select related ์ prefetch related๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ๋ฅผ ์ค์ฌ์ ์ต์ ํ ํ ์ ์๋ค.
์ฆ, ํ๋์ QuerySet ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฐ๊ด์๋ Modele๋ค์ ๊ฐ์ด
๊ฐ์ ธ์จ๋ค
์ฐ์ ๊ฐ๋จํ ๋ชจ๋ธ ํ๋๋ก ์๋ฅผ ๋ค์ด ์ดํดํด๋ณด์.
models.py
-------------
# ๊ณ ๊ฐ ์๋ก๊ฐ ๊ตฌ๋งคํ ๋ฌผ๊ฑด์ ์ ๋ ๊ฒน์น์ง ์๋๋ค๋ ๊ฐ์ ํ์, ๊ณ ๊ฐ๊ณผ ๊ทธ ๊ณ ๊ฐ์ด ๊ตฌ๋งคํ ๋ฌผํ์ ๊ด๊ณ๋ก ์๊ฐํด๋ณด์
# (์ผ๋๋ค์ ๊ด๊ณ)
from django.db import models
class Customer(models.Model):
name = models.CharField(max_length=20)
class Products(models.Model):
name = models.CharField(max_lenght=50)
buyer = models.ForeignKey(Customer, on_delete=models.CASCADE)
select_related
๋ 1:1 ํน์ 1:N์ ๊ด๊ณ์์ N์ ์ ์ฅ์์ ์ฌ์ฉํ ์ ์๋ค. ์์ ๊ฒฝ์ฐ, 1:N์ ๊ด๊ณ์ด๋ฉด์ N์ ์ ์ฅ์ธ Products์์ ์ฌ์ฉํ ์ ์๋ค
N์ ์ ์ฅ
: ๊ณ ๊ฐ 1๋ช ์ด ๋ฌผ๊ฑด ์ฌ๋ฌ๊ฐ๋ฅผ ์์ผ๋๊น N์ ํด๋นํ๋ ๊ฒ์ Products
buy_product = Products.objects.select_related('buyer').get(id=1)
foreign key๋ก ์ฐ๊ฒฐ๋์ด ์๋ buyer์นผ๋ผ์ ๋์์ ๋ถ๋ฌ์ด์ผ๋ก์จ ์ฟผ๋ฆฌ๋ฌธ ๊ฐฏ์๋ฅผ ์ค์ผ ์ ์๋ค.
prefetch_related
๋ M:M ํน์ 1:N์ ๊ด๊ณ์์ 1์ ์ ์ฅ์์ ์ฌ์ฉํ ์ ์๋ค.
์์ ๊ฒฝ์ฐ, ํ๋ช ์ customer๊ฐ ๊ตฌ๋งคํ ์ํ์ ์ ๋ถ ๋ถ๋ฌ์ค๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ค.
product_list = Customer.objects.prefetch_related('products_set').get(id=1)
์ญ์ฐธ์กฐ์ ๊ฒฝ์ฐ _set
์ ์ด๋ค.
๋ง์ฝ์ ์ฐธ์กฐํ๋ ๋ชจ๋ธ์์ related_name์ ๋ฐ๋ก ์ผ๋ค๋ฉด ๊ทธ ์ด๋ฆ์ ์ฐ๋ฉด ๋๋ค.
ex.
class ProductRelated(models.Model):
product = models.ForeignKey(Products, on_delete=models.CASCADE, related_name='product')
related_product = models.ForeignKey(Products, on_delete=models.CASCADE, related_name ='related_product')
์ด๋ ๊ฒ related_name์ ๋ฐ๋ก ๋ช
์ํ๋ค๋ฉด ์ญ์ฐธ์กฐ์ _set์ ์ฐ์ง ์๋๋ค.