팀 프로젝트 안에서, 게임의 힌트 버튼을 누르게 되면 누른 사람의 포인트가 약간 차감이 된다.
이 부분을 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 |