Serializers

Jeong Ha Seung·2021년 11월 25일
post-thumbnail

Serializer는 기본적으로 데이터가 보여야하는 방식을 성명해줘야 하는 Form이다.(JSON 형태)

serizlize는 파이썬 객체 👉 JSON 객체

rooms/views.py

from rest_framework.decorators import api_view
from rest_framework.response import Response #'Response'는 django rest framework 응답에서 오는것
from .models import Room
from .serializers import RoomSerializer

@api_view(["GET"])
def list_rooms(request):
    rooms = Room.objects.all()
    serialized_rooms = RoomSerializer(rooms, many=True) #RoomSerializer는 Room 리스트를 이해하지 못하기 때문에 many=True를 추가한다.
    return Response(data=serialized_rooms.data)

rooms/serializers.py

from rest_framework import serializers

class RoomSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=140)
    price = serializers.IntegerField()
    bedrooms = serializers.IntegerField()
    instant_book = serializers.BooleanField()
    

RoomSerializer(serializers.ModelSerailzer)

위와 같이 하면 어떤 것도 선언해 줄 필요가 없고
다음과 같이 바꿔주면 된다.

from rest_framework import serializers
from .models import Room

class RoomSerializer(serializers.ModelSerializer):
    class Meta:
        model=Room
        fields=("name", "price", "instant_book")
        

또한 room Model은 user를 갖고 있기 때문에

fields에 user를 추가하면 다음과 같이 나온다.

그리고 superhost의 여부를 얻기 위해 user의 새로운 serializer를 만든다.

users/serializers.py

from rest_framework import serializers
from .models import User

class TinyUserSerializer(serializers.ModelSerializer):
    class Meta:
        model=User
        fields=("username","superhost")

그리고 내가 소유하고 있는 Room에게 serializer를 알려야 한다.

rooms/serializers.py 파일에

from users.serializers import TinyUserSerializer
...
user = TinyUserSerializer()
profile
블로그 이전했습니다. https://morethan-haseung-log.vercel.app

0개의 댓글