bestwish
Hong's Tistory
bestwish
전체 방문자
오늘
어제
  • 분류 전체보기 (32)
    • DevOps (21)
      • Django (15)
      • TIL (2)
      • Python (2)
      • Git (0)
      • Docker (1)
      • Infra (1)
    • Algorithm (3)
      • 백준문제 (3)
      • 이론 (0)
    • CS (6)
      • Data Structure (6)

인기 글

최근 글

hELLO · Designed By 정상우.
bestwish

Hong's Tistory

DevOps/Django

[Django] F

2023. 7. 5. 21:01

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
    'DevOps/Django' 카테고리의 다른 글
    • [Django] django-pydenticon - 디폴트 프로필
    • [DRF] 이미지 URL 호스트, 포트 제거
    • [DRF] Swagger 사용하기
    • [Django] 프로젝트 세팅 ( + React )
    bestwish
    bestwish

    티스토리툴바