[pydantic] Field Alias

LULLU·2022년 12월 13일

Pydantic Field Alias

  • field name은 python 내부 변수로 사용
  • field alias는 init에 들어가는 parameter로 사용
    - 원래는 alias로만 init이 되지만,
    • allow_population_by_field_name = True로 하면 field name으로도 init이 된다.

Example

from pydantic import BaseModel

class UserSchema(BaseModel):
	user_name = Field(alias="userName")
    
> O : user_schema = UserSchema(userName="lullu")
> X : user_schema = UserSchema(user_name="lullu")
class UserSchema2(BaseModel):
	user_name = Field(alias="userName")
    
    class Config:
        allow_population_by_field_name = True
        
> O : user_schema = UserSchema(userName="lullu")
> O : user_schema = UserSchema(user_name="lullu")

django-ninja view에서 사용

from ninja import Schema, Field


class ViewParamsPython(Schema):
    id_string: str = Field(alias="idString")

    class Config:
        allow_population_by_field_name = True


class ViewParamsJS(Schema):
    idString: str = Field(alias="id_string")

    class Config:
        allow_population_by_field_name = True


@api.post("/view_python", tags=["view_test"])
def view_python(request, params: ViewParamsPython):
    return ViewParamsPython(id_string=params.id_string + "_response")

    """
    request:
        {
            "idString": "string"
        }

    response:
        {
            "id_string": "string_response"
        }
    """

@api.post("/view_js", tags=["view_test"])
def view_js(request, params: ViewParamsJS):
    return ViewParamsJS(idString=params.idString + "_response")
    
    """
    request:
        {
            "id_string": "string"
        }

    response:
        {
            "idString": "string_response"
        }
    """

0개의 댓글