https://sdoram.tistory.com/182
1.하나의 url에서 다른 정보 보여주기
문제점
order_by나 pagination을 구현할 때는 정보의 순서만 바뀌고 같은 데이터 구조를 가지고 있었는데 지금 구현하고 싶은 부분은 review와 accompany를 바꿔가면서 보여주길 원한다.
시도해 본 것들
class ExhibitionReviewSerializer(serializers.ModelSerializer):
"""전시회 상세보기 리뷰"""
reviews = ReviewSerializer(source="review_set", many=True)
# accompanies = AccompanySerializer(many=True)
class Meta:
model = Exhibition
fields = [
"id",
"user_id",
"info_name",
"content",
"location",
"image",
"created_at",
"updated_at",
"category",
"start_date",
"end_date",
"reviews",
# "accompanies",
]
class ExhibitionAccompanySerializer(serializers.ModelSerializer):
"""전시회 상세보기 동행구하기"""
# reviews = ReviewSerializer(source="review_set", many=True)
accompanies = AccompanySerializer(many=True)
class Meta:
model = Exhibition
fields = [
"id",
"user_id",
"info_name",
"content",
"location",
"image",
"created_at",
"updated_at",
"category",
"start_date",
"end_date",
# "reviews",
"accompanies",
]
class ExhibitionDetailView(APIView):
def get_permissions(self):
if self.request.method in ["PUT", "DELETE"]:
return [IsAdminUser()]
return [IsAuthenticatedOrReadOnly()]
def get(self, request, exhibition_id):
exhibition = get_object_or_404(Exhibition, id=exhibition_id)
select = request.query_params.get("select", None)
if select == "review":
serializer = ExhibitionReviewSerializer(exhibition)
elif select == "accompany":
serializer = ExhibitionAccompanySerializer(exhibition)
else:
serializer = ExhibitionReviewSerializer(exhibition)
return Response(serializer.data)
지금 구현한 방식은 query_params로 선택할 serializer를 구분하는 방식으로 구현했다.
하지만 하나의 용도에서 2가지 serializer를 선언해야 하는 점이 개선할 코드가 없을지 고민된다.
하나의 serializer로 보여주고 프론트에서 구분하기
아직 시도하지 않았지만 review와 accompany의 데이터 양이 다를 경우 pagination에서 문제가 생길 가능성 있을 것 같다.
serailizer에 select정보를 집어넣고 if문 처리하기
아직 시도하지 않아서 가능한지 여부를 알 수 없지만 data=request.data처럼 데이터를 집어넣을 수 있으니 select=select같은 방식으로 가능한지 확인해보기
알게 된 점
serializer를 커스텀할 일이 크게 없어서 만들어진 것을 활용하기만 주로 했는데 이번 주말에 좀 더 깊게 파보면서 알아봐야 할 것 같다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-06-13 백준-시리얼 번호 (0) | 2023.06.13 |
---|---|
TIL 23-06-11 백준-듣보잡 (0) | 2023.06.11 |
TIL 23-06-08 최종 팀 프로젝트 환경 변수 이슈&pagination (0) | 2023.06.08 |
TIL 23-06-07 링크드 리스트 (0) | 2023.06.07 |
TIL 23-06-06 백준 - 3의 배수 (0) | 2023.06.06 |