728x90
배경
Docs작성을 위해 DRF-Seralizer을 사용하면 자동으로 만들어주지만 기존 DRF-Seralizer는 무거워서 사용중인 view들은 Csutom 해서 사용중입니다. 그러나 Docs를 위해 DRF-Seralizer를 만들 수 는 없는 이유이기에 inline_serializer을 이용하기로 했습니다.
여기서 seriliazer을 전체 한땀한땀 만들기엔 너무 귀찮고 시간이 많이 걸리고 다른 Model을 참조하는 것은 Model들을
왔다 갔다 하면서 귀찮아 주금 아주 시간이 오래 걸립니다.
그래서 원하는 필드값을 받아 inline_seralizer로 만드는 함수를 만들었습니다
inline_serializer는 drf-spectacular 패키지에서 제공하는 유틸리티 함수 중 하나입니다.
이 함수는 기본적으로 OpenAPI 스펙의 components/schemas에 들어가는 inline 시리얼라이저를 생성합니다.
코드
from drf_spectacular.utils import inline_serializer
@classmethod
def get_schema(cls, name, selected_fields: List[str] = None):
all_fields = {key: cls().fields[key] for key in cls().fields.keys()}
serializer_fields = {
key: all_fields[key] for key in all_fields.keys() if key in selected_fields
} if selected_fields else all_fields
return inline_serializer(
name=f'{name}Schema',
fields=serializer_fields,
help_text='Place Review Schema'
)
설명
selected_fields로 원하는 필드 값을 받아서 inline_serailizer로 받아오기
※ inline_serializer의 name 값이 같으면 같은 inline_serializer로 인식되서 덮어쓰기 됨 > name을 파라미터로 받음
https://drf-spectacular.readthedocs.io/en/latest/drf_spectacular.html
'Python > Docs' 카테고리의 다른 글
[Python] Redoc (0) | 2024.02.21 |
---|