Computer Programming/AI

TIL_Django, F expressions

JYCoder 2023. 10. 24. 23:51

팀 프로젝트 안에서, 게임의 힌트 버튼을 누르게 되면 누른 사람의 포인트가 약간 차감이 된다.

이 부분을 views.py에서 구현해 보았다.

 

from django.db.models import F

...

class HintView(APIView):
    permission_classes = [permissions.IsAuthenticated]
    def post(self,request,quiz_id):
        quiz = get_object_or_404(Quiz, pk=quiz_id)
        hint = quiz.hint
        user = request.user
        user.update(point=F("point")-constant.HINT_DEDUCTED_POINT)
        History.objects.create(user=user, action="hint", point=user.point)
        return Response({"hint": hint}, status=status.HTTP_200_OK)

여기서 F expression을 사용했다.

 

Django에서 F 표현식은 데이터베이스 query를 효율적으로 처리하기 위해 사용되는 기능이다. F expression을 사용하면 데이터베이스에서 Python 코드를 사용하지 않고도 query를 조작하고 필터링 할 수 있다.

 

보통은 Django ORM을 사용할 때, 데이터베이스에서 가져온 object를 python으로 가져와서 처리하는데, F expression을 데이터베이스 내에서 query를 수행하여 data를 python으로 모두 가져올 필요가 없다.

 

F expression은 모델 필드의 값을 변경하거나 필드 값 간의 비교 등의 작업을 할 수 있다. 따라서, 이번 프로젝트에서 힌트를 보았을 때 point가 차감되는 부분에서 user의 'point' 필드 값만 HINT_DEDUCTED_POINT 만큼 줄어들게 구현할 수 있었다.

 

LIST

'Computer Programming > AI' 카테고리의 다른 글

TIL_About Linux  (1) 2023.10.30
TIL_JavaScript, synchronous와 asynchronous  (0) 2023.10.25
TIL_CNN, RNN, LSTM  (0) 2023.10.19
TIL_Machine Learning(3)  (1) 2023.10.18
TIL_Machine Learning(2)  (0) 2023.10.17