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": "직접 촬영한 사진을 볼 수 있어서 좋아요~",
    }
  ]
}