장고 QuerySet의 지연평가
from django.shortcuts import render, get_object_or_404
from .models import *
# Create your views here.
# 카테고리 페이지, URL로부터 category_slug를 찾아서 현재 어느 카테고리를 보여주는 것인지 판단,
# 선택한 카테고리가 없을 경우 전체 상품 목록 노출
def product_in_category(request, category_slug=None):
current_category = None
categories = Category.objects.all()
products = Product.objects.filter(available_display=True)
# products에서 filter를 여러번 실행하는데 실제로 데이터베이스에 질의는 딱 한번만 전달,
# 장고의 QuerySet은 지연평가 방식을 사용하기 때문에 데이터를 질의하는 시점까지는 몇 번의 필터를 걸더라도 부하가 걸리지 않음
if category_slug:
current_category = get_object_or_404(Category, slug=category_slug)
products = products.filter(category=current_category)
print(products.query)
return render(request, 'shop/list.html',
{'current_category': current_category, 'categories': categories, 'products': products})
장고 ORM에서는 지연평가를 사용해서 filter 메서드를 몇 번 호출하는 것에 상관없이 실제로 데이터베이스에 질의를 전달하는 것은 실제로 데이터를 질의하는 시점까지 늦추기때문에 부하를 줄일 수 있다.
하지만 이러한 장점을 생각없이 함부로 사용하다가는 문제가 발생할 가능성도 있기때문에 실제로 장고 ORM에서 쿼리를 어떻게 생성하여 데이터베이스에 쿼리를 전달하는지에 대한 명확한 이해가 필요하다.
https://daeguowl.tistory.com/171
Author And Source
이 문제에 관하여(장고 QuerySet의 지연평가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@estry/장고-QuerySet의-지연평가저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)