[drf]airbnb-api -18 SerializerMethodField
'results'키에 새로우 value하나를 추가 해볼게요.
바로 'isOnFavirite'라는 'isOnFavirite: true' 또는 'isOnFavirite: false'를 넣어서 해당 방이 나의 관심목록에 있는지 없는지를 나타내게 되요.
즉, 누가 api/v1/rooms
endpoint를 불렀느냐에 따라서 동적으로 데이터를 가져와서 클라이언트에게 줘야되요.
SerializerMethodField
read-only filed라는 점 유의하세요.
그래서 serializers.py파일에 우리가 정의할 시리얼 라이저 클래스의 필드를 정의할게요.
바로 위에 보면 get_days_since_joined()라는 메서드가 정의되어 있조?
따라해야할건 get_??
이라는 prefix를 넣어주고 인자값 self와 인스턴스변수로 받을 인자이름을 2번째로 넣고 return할 넣어주면되요.
...
...
def get_am_i_sexy(self, obj):
print(obj)
return True
그럼 서버에서 다시 실행해보면 정상적으로 am_i_sexy
라는 필드가 출력되요.
콘솔에서 프린트로 찍은 정보를 확인해보면 room에 대한 객체 정보가 멀쩡히 잘 찍혀 나온걸 확인 할 수 있어요.
이름이 이상하니깐. 원래 의도했던 대로 is_fav
이라고 변수명을 바꿀게요.
핵심입니다. 그럼 이 방을 누가 보고 있는지 확인해야겠조?
그럼 특정 시리얼 라이저에게 누가 지금 해당 방을 보고 있는지 알려줘야해요.
일반적으로 파이썬에서 request
를 통해서 도대체 누가 로그인했는지 유저 정보를 파악하게 됩니다. .user
속성값을 통해서 말이조!
RoomSerializer()클래스에 context={'request':request}
키워드 인자를 넣어서 정보를 결국 알려주는 거에요.
그리고 get_is_fave() 메서드를 아래와 같이 손볼게요. 그럼 로그인한 유저의 정보가 프린트로 찍어보면 콘솔에서 확인할수가 있어요.
최종 로직
결국 다이나믹 필드 구현을 하기위해서 먼저 get_
메서드를 사용하고 그 안에 비즈니스 로직을 작성하게되요.
특히 로그인한 유저의 고유한 정보를 알고 싶다면 view에서 context={"?":"} 키워드 인자로 값을 넘겨줘서 request.user속성 값을 넘겨 줄 수 있도록 하는거에요.
그리고 이후 self.context.get()메서드에서 넘겨받은 딕셔너리에서 'request'키를 조회하여 값을 받아오고 is_authenticated
속성값을 통해서 로그인 여부도 확인하게되요. 다음 django ORM을 통해서 in 멤버십 연산자를 통해서 가져온 방의 정보가 현재 로그인 한 유저의 관심 목록 리스트에 있는지 확인하게되요.
Author And Source
이 문제에 관하여([drf]airbnb-api -18 SerializerMethodField), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyeseong-dev/drfairbnb-api-18-DynamicField저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)