개발 문서/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 객체를 잘 활용하면 복잡한 쿼리를 쉽게 처리할 수 있습니다.