본문 바로가기
스파르타코딩 AI웹개발 3기

내일배움캠프_TIL_2022.12.12

by 청귤에이드 2022. 12. 17.

마이페이지 부분 view와 serializer 부분을 작성할 때

가령, 내가 선택한 취미, 신청한 워크샵, 생성한 워크샵 정보를

각각 정리하는 것이 훨씬 더 가독성 있고, 필요한 정보들을 

세부적으로 잘 구분하여 사용할 수 있다고 생각했는데 오히려 코드만 번잡해지고

백엔드 부분 뿐만 아니라 자바스크립트 부분에서도 함수를 여러번 호출해야 하는 번거로움이 있어서

한 번에 불러올 수 있도록 하는 것이 훨씬 효율적임을 깨달았다.

 

아래는 mypageSerializder로 통합한 부분이며 필요한 다른 필드는 다른  serializer를 도입하여

(class Meta 위에 있는 변수들) 작성할 수 있다.

여기서 many=True를 입력하지 않으면 정참조로 불러온 변수만 호출할 수 있고, 해당 serializer의 정보를 모두 불러오기 위해서는 반드시 many=True를 붙여야 한다.

 

# 마이페이지

class MypageSerializer(serializers.ModelSerializer): 
    workshop_likes = MypageWorkshopLikeSerializer(many=True)
    hobby = HobbySerializer(many=True)
    workshop_host = WorkshopListSerializer(many=True)
    workshop_apply_guest = WorkshopApplySerializer(many=True)
    class Meta:
        model = User
        fields = ('nickname', 'email', 'profile_image', 'workshop_likes', 'hobby', 'workshop_host', 'workshop_apply_guest')

불러온 정보의 JSON 형태는 다음과 같다.

{
    "nickname": "js",
    "email": "js@gmail.com",
    "profile_image": "/media/user_profile/user_js_92502062eb154ef781a6a90f71f1a596.jpg",
    "workshop_likes": [
        {
            "pk": 1,
            "title": "배드민턴 클래스",
            "workshop_image": "/media/workshop/workshop_%EB%B0%B0%EB%93%9C%EB%AF%BC%ED%84%B4_%ED%81%B4%EB%9E%98%EC%8A%A4_b56665d30e454accbf075fbce39b51e8.jpg",
            "location": "경기",
            "address": "의정부시"
        },
        {
            "pk": 2,
            "title": "독서모임 클래스",
            "workshop_image": "/media/workshop/workshop_%EB%8F%85%EC%84%9C%EB%AA%A8%EC%9E%84_7d2fb5fc87294da09eb0651e018195e7.jpeg",
            "location": "서울",
            "address": "종로구"
        },
        {
            "pk": 3,
            "title": "뷰티 클래스",
            "workshop_image": "/media/workshop/workshop_%EB%B7%B0%ED%8B%B0_%ED%81%B4%EB%9E%98%EC%8A%A4_4a41955e95484a7e8768861361b8ada6.jpeg",
            "location": "경기",
            "address": "용인시"
        }
    ],
    "hobby": [
        {
            "id": 1,
            "category": "핸드메이드"
        },
        {
            "id": 2,
            "category": "쿠킹"
        },
        {
            "id": 5,
            "category": "음악"
        },
        {
            "id": 6,
            "category": "요가/필라테스"
        },
        {
            "id": 7,
            "category": "레저/스포츠"
        },
        {
            "id": 8,
            "category": "뷰티"
        },
        {
            "id": 11,
            "category": "자기계발"
        }
    ],
    "workshop_host": [
        {
            "id": 2,
            "title": "독서모임 클래스",
            "content": "독서모임이에요",
            "workshop_image": "/media/workshop/workshop_%EB%8F%85%EC%84%9C%EB%AA%A8%EC%9E%84_7d2fb5fc87294da09eb0651e018195e7.jpeg",
            "category": "자기계발",
            "location": "서울",
            "date": "2022년 12월 04일 Sunday",
            "max_guest": 20,
            "workshop_apply": [
                {
                    "guest": 4,
                    "guest_name": "jh",
                    "workshop": "독서모임 클래스",
                    "result": "대기",
                    "created_at": "2022-12-16T17:39:33.234248"
                },
                {
                    "guest": 3,
                    "guest_name": "sm",
                    "workshop": "독서모임 클래스",
                    "result": "승인",
                    "created_at": "2022-12-16T17:39:33.234248"
                },
                {
                    "guest": 5,
                    "guest_name": "hs",
                    "workshop": "독서모임 클래스",
                    "result": "승인",
                    "created_at": "2022-12-16T17:39:33.235233"
                }
            ],
            "cur_time": "PM 05:38",
            "views": 3
        }
    ],
    "workshop_apply_guest": [
        {
            "guest": 2,
            "guest_name": "js",
            "workshop": "뷰티 클래스",
            "result": "대기",
            "created_at": "2022-12-16T18:44:06.745497"
        },
        {
            "guest": 2,
            "guest_name": "js",
            "workshop": "배드민턴 클래스",
            "result": "대기",
            "created_at": "2022-12-16T18:44:10.909492"
        }
    ]
}