DevOps/Django

[Django] F

bestwish 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')을 하여 필드의 값을 참조할 수 있다.
위의 상황은 장바구니에 이미 있는 상품의 경우 수량을 증가시켜준다.