F란?
Django에서 제공하는 F 객체는 데이터베이스 필드의 값을 참조하고 조작하는 데 사용되는 객체이다.
F 객체를 사용하면 데이터베이스 쿼리를 통해 필드 값을 직접 업데이트 할 수 있다.
F 객체를 사용하면 데이터베이스에 직접 쿼리를 보내지 않고도 필드 값을 업데이트할 수 있으므로, 데이터의 일관성을 유지하면서 성능을 향상시킬 수 있다.
예시
from django.db.models import F
class CartListCreateAPIView(ListCreateAPIView):
"""
장바구니 생성 및 리스트
"""
queryset = Cart.objects.all()
serializer_class = CartSerializer
def get_queryset(self):
user = self.request.user
qs = super().get_queryset()
qs.filter(user_id=user)
return qs
def perform_create(self, serializer):
user = self.request.user
product_id = self.request.data['product_id']
product_option_id = self.request.data['product_option_id']
price = self.request.data['price']
cart_item = self.queryset.filter(product_id=product_id, product_option_id=product_option_id, price=price).first()
if cart_item:
# 이미 존재하는 상품인 경우 quantity를 증가시킴
cart_item.quantity = F('quantity') + 1
cart_item.save()
return
serializer.save(user_id=user)
F('field_name')을 하여 필드의 값을 참조할 수 있다.
위의 상황은 장바구니에 이미 있는 상품의 경우 수량을 증가시켜준다.
'DevOps > Django' 카테고리의 다른 글
[Django] django-pydenticon - 디폴트 프로필 (0) | 2023.01.28 |
---|---|
[DRF] 이미지 URL 호스트, 포트 제거 (0) | 2023.01.10 |
[DRF] Swagger 사용하기 (0) | 2023.01.09 |
[Django] 프로젝트 세팅 ( + React ) (0) | 2022.12.16 |
[Django] SENDGRID를 이용한 메일 보내기. (0) | 2022.11.10 |