개발 문서/Django
Django ORM과 Q, F 객체 설명
copg
2025. 3. 16. 18:40
728x90
반응형
Django ORM은 매우 강력한 기능들을 제공하는데, 그 중에서도 자주 사용되는 것이 바로 Q 객체와 F 객체입니다.
Django ORM에서의 Q, F 객체 사용법을 이해할 수 있도록 자세히 설명합니다.
📌 Django ORM 간단 정리
Django ORM은 데이터베이스를 Python 코드로 간편하게 조작할 수 있게 해주는 강력한 도구입니다. 간단한 예를 살펴보면:
from myapp.models import Product
# 모든 제품 조회
products = Product.objects.all()
# 특정 조건 조회
cheap_products = Product.objects.filter(price__lt=500)
🚀 Q 객체란?
Q 객체는 Django ORM에서 복잡한 쿼리를 좀 더 쉽게 작성할 수 있도록 도와주는 객체입니다. 특히 논리적 OR 조건을 만들 때 유용합니다.
🔑 Q 객체의 사용법
Q 객체는 django.db.models에서 가져옵니다.
from django.db.models import Q
예제 코드
from django.db.models import Q
# 가격이 1000보다 작거나, 이름이 'Laptop'인 제품 검색
products = Product.objects.filter(Q(price__lt=1000) | Q(name__icontains='Laptop'))
Q 객체의 특징
- 여러 조건을 논리 연산자 (|, &, ~)로 결합할 수 있습니다.
# 가격이 1000보다 크거나, 이름이 Laptop이 아닌 제품 찾기
products = Product.objects.filter(Q(price__gt=1000) | ~Q(name="Laptop"))
📌 F 객체란?
F 객체는 Django 모델의 필드를 참조하여 데이터를 동적으로 조회하거나 업데이트할 때 사용하는 객체입니다.
🔑 F 객체의 사용법
F 객체는 필드 간의 연산을 할 때 특히 유용합니다.
from django.db.models import F
# 모든 제품의 가격을 10% 인상하기
Product.objects.update(price=F('price') * 1.1)
F 객체 예제
# 재고(stock)가 판매량(sold)보다 적은 제품을 찾기
low_stock_products = Product.objects.filter(stock__lt=F('sold'))
🛠️ Q, F 객체 활용 예제
복잡한 조건 조회
from django.db.models import Q, F
# 가격이 500 이상이거나, 재고가 5 이하인 제품을 조회
products = Product.objects.filter(Q(price__gte=500) | Q(stock__lte=5))
필드 간 연산
# 판매가가 원가보다 낮은 제품 조회
discount_products = Product.objects.filter(price__lt=F('original_price'))
⚠️ Q, F 객체 주의사항
- 조건을 복잡하게 결합할 때는 가독성을 위해 적절히 줄바꿈을 사용하세요.
- F 객체는 데이터베이스 수준에서 연산을 수행하므로 성능에 매우 효율적입니다.
🚨 N+1 쿼리 문제와 Q, F 객체
- N+1 쿼리 문제를 예방하기 위해서는 쿼리 최적화가 필수입니다. select_related, prefetch_related 등을 함께 사용하면 성능을 더욱 높일 수 있습니다.
🌟 결론
Django ORM의 Q, F 객체를 잘 활용하면 복잡한 쿼리를 쉽게 처리할 수 있습니다.