Backend/Python
[Pydantic] 별칭 Alias를 snake_case와 camelCase를 혼용하고 싶을 때
미숫가루.dev
2024. 7. 5. 18:06
문제
하나의 클래스를 내부적으로는 snake_case를 사용하고, API 요청 및 응답은 camelCase를 사용해야 한다.
해결 방법
pydantic의 AliasChoices를 사용한다.
✅ 사용 방법
from pydantic import BaseModel, Field, AliasChoices
class Review(BaseModel):
user_id: str = Field(..., validation_alias=AliasChoices("user_id", "userId")
rating: int
content: str
// API 요청 모습
const raw = JSON.stringify({
"userId": "6687b72905040625af098dc2",
"rating": 3,
"content": "배송이 너무 느렸어요ㅠㅠ"
});
# MongoDB beanie-odm 을 사용하는 모습
from typing import List
from beanie import Document, PydanticObjectId
from app.schemas import Review
class Reviews(Document):
event_id: PydanticObjectId
bucket_number: int
reviews: List[Review]
# 저장된 Document
{
"_id": {
"$oid": "6687b71705040625af098dbd"
},
"event_id": {
"$oid": "6687b72205040625af098dc0"
},
"bucket_number": 1,
"reviews": [
{
"user_id": {
"$oid": "6687b72905040625af098dc2"
},
"rating": 5,
"content": "직접 촬영한 사진을 볼 수 있어서 좋아요~",
}
]
}