J, J Blog
[Django] prefetch_related 본문
우리가 쇼핑몰에서 주문을 할 때, 여러 상품들을 장바구니에 담아 구매요청을 하고 한 번에 결제를 한다.
이 때, '주문'과 '주문 상품' 은 일 대 다 관계를 갖게 된다. prefetch_related
는 이러한 데이터를 한 번에 가져올 때 유용하게 쓰인다. (성능상의 이점도 있으니 Django에서 서로 다른 테이블을 조인하여 가져오는 경우에는 prefetch_related 를 꼭 사용하자)
'주문' 모델을 'Order' 라 하고
'주문상품' 모델을 'OrderItem' 이라 한다.
# models.py
class Order(models.Model):
created_date = models.DateTimeField(auto_now_add=True)
class OrderItem(models.Model):
order = models.ForeignKey(
Order,
on_delete=models.CASCADE,
related_name='order_items'
) # prefetch_related(related_name)
price = models.IntegerField(verbose_name='가격')
quantity = models.PositiveIntegerField(default=1, verbose_name='수량')
# views.py
def my_views(request):
orders = Order.objects.all().prefetch_related('order_items') # prefetch_related(related_name)
<!-- order_list.html -->
{% for order in orders %}
{% for item in order.order_items.all %}
<tr>
<td>{{ order.id }}</td>
<td>{{ order.created_date }}</td>
<td>{{ item.price }} | {{ item.quantity }}</td>
</tr>
{% endfor %}
{% endfor %}
주석처리한 부분에 주의해 view를 작성 한다.
'Programming > Django' 카테고리의 다른 글
[Django] 체크박스 리스트(check boxes) 데이터 POST로 처리하기 (0) | 2020.01.21 |
---|---|
[Django] 천 단위 쉼표찍기 (0) | 2020.01.19 |
[Django] login 시 요청했던 페이지로 redirect 하기 (1) | 2020.01.18 |
[Django] 템플릿(templates)에서 사용하는 admin url (0) | 2020.01.18 |
[Django] django-imagekit 을 사용해 썸네일 만들기 (0) | 2020.01.16 |