[django] 내가 속해있는 대화방 리스트만 get 하기

Hani Kim·2023년 9월 22일
0

project

목록 보기
4/10

목표:

대화방(DM ROOM)리스트를 get 할 때 내가 속해있는 (host거나 member인) 대화방만 불러오기

현재 상태:

  • DmRoom Model에 유저가 host, member로 나뉘어져 있음
  • User 모델에 dmrooms가 있음

문제 발생:

처음엔 아래처럼 작성했었는데, 이렇게 하자 request.user.dmrooms.all()가 host혹은 member인 dmrooms를 알아듣지 못해 불러오지 못하는 상황 발생

def get(self, request):
        user_dmrooms = request.user.dmrooms.all()
        serializer = DmRoomGetSerializer(
            user_dmrooms,
            many=True,
        )
        return Response(serializer.data)"""

올바른 코드:

 def get(self, request):
        hosted_dmrooms = request.user.hosted_dmrooms.all()
        joined_dmrooms = request.user.joined_dmrooms.all()

        user_dmrooms = (hosted_dmrooms | joined_dmrooms).distinct().order_by("-pk")

        # user_dmrooms = request.user.dmrooms.all()
        serializer = DmRoomGetSerializer(
            user_dmrooms,
            many=True,
        )
        return Response(serializer.data)

.distinct()는 중복된 대화방을 불러오는 것을 방지하기 위해 작성. (없었을 때 멤버 수만큼 대화방 리스트를 불러오는 오류 발생)
.order_by("-pk") 는 최근 생성 대화방부터 불러오기 위해 pk 내림차순으로 정렬하기 위함.

profile
Django Fullstack 🍕

0개의 댓글