ListAPIView

Jeong Ha Seung·2021년 11월 27일
0

이제 방들의 리스트를 보는 것이 아닌 방 자체를 보여주도록 하자.
ListAPIView를 사용하면 더욱 편하게 List화면과 Pagenation을 구현할 수 있다.

rooms/views.py

from rest_framework.generics import ListAPIView, RetrieveAPIView
from .models import Room
from .serializers import RoomSerializer, BigRoomSerializer


class ListRoomsView(ListAPIView):
    queryset = Room.objects.all() #queryset 가져오기
    serializer_class = RoomSerializer


class SeeRoomView(RetrieveAPIView):
    queryset = Room.objects.all()
    serializer_class = BigRoomSerializer

위와 같이 RetrieveAPIView를 import한다.
RetrieveAPIView는 하나의 데이터만을 보고 싶을 때 사용하는 방법이다.

rooms/urls.py

urlpatterns=[...,path("<int:pk>/", views.SeeRoomView.as_view())]

rooms/serializers.py

class RoomSerializer(serializers.ModelSerializer):

  user = TinyUserSerializer()

  class Meta:
      model = Room
      fields = ("pk", "name", "price", "instant_book", "user") #1개의 데이터만을 불러와야 되기 때문에 pk 값을 알아야 한다. fields에 pk 추가
    

그리고 api/v1/rooms/<pk 값> 으로 가보면

위처럼 에러가 뜬다.

ListRoomsView와 마찬가지로

queryset=Room.objects.all()

을 추가하면 되는데 뭔가 이상하다. 우리가 보길 원하는 것은 하나의 방이기 때문이다. 이제 우리는 serializer 클래스가 필요하다.

class BigRoomSerializer(serializers.ModelSerializer):
    class Meta:
        model = Room
        fields = ("__all__") #Model의 모든 Field를 사용해야 함을 나타낸다.
    

또 다른 class를 만들면

이처럼 하나의 방만 볼 수 있다.

profile
블로그 이전했습니다. https://morethan-haseung-log.vercel.app

0개의 댓글

관련 채용 정보