Django

DRF BooleanField

끈끈 2023. 4. 25. 23:23

 

TODO LIST

  • is_complete : 완료 여부. default false
  • completion_at : 할일 완료 시간.

 

models.py:

is_complete = models.BooleanField(default=False)

 

views.py:

class TodoDetailView(APIView):
    permission_classes = [permissions.IsAuthenticated]

    # 할일 수정
    def put(self, request, todo_id, user_id):
        user = get_object_or_404(User, id=user_id)
        todo = Todo.objects.get(id=todo_id)
        if request.user == user:
            serializer = TodoCreateSerializer(todo, data=request.data)

            if serializer.is_valid():
                if request.data.get("is_complete") == True:
                    serializer.save(completion_at=timezone.now())
                else:
                    serializer.save()
                return Response(serializer.data, status=status.HTTP_200_OK)
            else:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
        else:
            return Response("권한이 없습니다!", status=status.HTTP_400_BAD_REQUEST)

 

db

 

postman / PUT

 

  • PUT 요청시, 할일 정보를 수정할 수 있어야 함
  • 할일을 완료한 경우, is_complete를 True로 수정할 수 있어야 
  • 완료하지 않은 경우, False로 다시 수정할 수 있어야 

 

처음에 "is_complete":"True" 등으로 넣으니 안 먹히더니 true / false 소문자로 하니 되더라

 

BooleanField에 null=True를 하려면 NullBooleanField를 사용해야 한다