이제 방들의 리스트를 보는 것이 아닌 방 자체를 보여주도록 하자.
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를 만들면
이처럼 하나의 방만 볼 수 있다.