wafflestudio/seminar-2020

Serializer가 반환하는 data를 취사선택해서 가져올 수 있나요?

Open

#176 opened on Sep 22, 2020

 (4 comments) (10 reactions) (0 assignees)Python (49 forks)auto 404
HW2backendgood first issuequestion

Repository metrics

Stars
 (27 stars)
PR merge metrics
 (PR metrics pending)

Description

SeminarSerializer.data로 반환하는 값은 다음과 같습니다.

{
    "id": Seminar id,
    "name": Seminar name,
    "capacity": Seminar capacity,
    "count": Seminar count,
    "time": Seminar time,
    "online": Seminar online,
  ...
}

하지만 저는 이중 아래와 같은 데이터만 사용하고 싶습니다.

{
    "id": Seminar id,
    "name": Seminar name,
}

이에 제가 생각한 해결책은 다음과 같습니다.


1. 직접 dict 데이터를 후가공한다.

.data로 반환되는 dict 데이터를 dict method를 이용해 원하는 가공을 거칠 수 있을 것입니다. 해당 부분을 함수화시켜 추후에 재사용 할 수도 있을 것으로 보입니다. 다만 이것은 views.py 파일 안에서 가능한 방식으로, 추후 다른 곳에서 같은 형태의 data를 사용하고 싶을 때, 해당 함수를 재정의하거나 불러와야 한다는 단점이 있습니다.

2. 원하는 데이터만을 반환하는 method를 SeminarSerializer 안에 정의해둔다.

1번에서 이야기한 함수를 SeminarSerializer class 안에 정의해서 필요할 때 해당 함수를 호출하는 방식이 있습니다. 어디서든 해당 클래스를 사용하는 곳에서 불러올 수 있다는 장점이 있습니다. 하지만 many=True를 사용해 ListSerializer를 불러오게 되면 해당 method를 사용할 수가 없게 되어 불편함이 따릅니다.

3. MiniSeminarSerializer class를 정의한다.

원하는 fields 만을 골라서 만든 Serializer을 정의하여 사용합니다. 이는 many=True에도 유효하며, 어디서든 불러와서 사용할 수 있습니다. 그리고 적다 보니 생각난 가장 좋은점은, 기존 serializer을 상속받으면 기존 method들도 사용할 수 있습니다.


이슈를 다 적고 보니 3번 방식이 가장 깔끔하고 좋다고 생각이 되어, 저는 3번 방식을 채택했습니다.

다만 이렇게 Serializer을 하나 더 정의하는 방식이 좋은 방식인지 확신이 들지 않습니다. 기존의 Serializer만으로도 반환하는 데이터를 취사선택하는 더 좋은 방식이 있을까 궁금해서 이슈 올립니다.

Contributor guide