본문으로 바로가기
반응형

Django Restframework Dynamically return subset column/specific fields

리액트 네이티브 공부 겸 학교 관련 어플을 만들고 있다.

그 과정에서 기존에 카카오톡 플러스친구로 만들어두었던 학식봇의 기능을 넣고 있는데

뒷단 API서버로 Django Restframework를 사용하고 있다.

학식 메뉴를 관리하는 테이블을 하나 만들었는데 그 구조는 아래와 같다.


2학, 3학, 상록회관, 생과대, 기숙사의 식단을 알려줘야 하므로

place에 장소를 담고 요일별로 식단 정보를 담아줬다.

여기서 하나 문제가 발생했는데 나는 단 한번의 요청으로 각 요일별 모든 장소의 식단을 뽑아보고 싶었다.

단순 MySQL 쿼리라면 SELECT mon FROM menu 이런식으로 뽑아주면 되는데

장고라서 좀 달랐다.

튼 기존 저장된 정보를 먼저 살펴보면


위와 같이 저장이 되어 있는데 모든 컬럼의 값들이 같이 출력이 된다.

내가 만들고 있는 것은 스마트폰 어플리케이션이고 최대한 빠르게, 불필요한 정보를 요청하지 않아야 했다.

어떻게 해야 할까 찾아보던 중 좋은 써드파티 패키지를 찾았다.

바로 djangorestframework-queryfields 라는 패키지이다.

이 패키지를 사용하면 /fields=컬럼명 의 요청을 통해 특정 컬럼의 값만 뽑아볼 수 있다.

먼저 아래의 명령어로 설치한다.


pip install djangorestframework-queryfields


다음으로 serializers.py를 연다.


상단에 from drf_queryfields import QueryFieldsMixin 을 넣어준다.


그리고 사용할 클래스쪽에 가서 QueryFieldsMixin을 추가한다.

이러면 끝이다.

아까와 같은 페이지에서 /fields=mon을 주면 아래와 같이 나온다.


성공적으로 월요일에 관한 정보를 뽑아왔다.

장고를 쓰다보면 정말 편하다. 내가 원하는 것들은 대부분 누군가 만들어놨다.

앞으로 API서버구축은 무조건 장고 rest framework를 이용할 것 같다.

참고로 /?fields!=컬럼명 이렇게 주면 특정 컬럼을 제외하고 출력해줄수도 있다.

자세한 건 아래의 두 사이트를 참고하자.


http://djangorestframework-queryfields.readthedocs.io/en/latest/installation.html

https://github.com/wimglenn/djangorestframework-queryfields


반응형