본문 바로가기
python

Pydantic v2 Validator: 필드와 모델 유효성 검사

by 니나노뭉 2024. 9. 5.

 

 


Pydantic에서 validator는 모델의 특정 필드나 모델 전체에 대해 유효성 검사를 수행하는 함수입니다. field_validator는 개별 필드의 값을 검사하고, model_validator는 모델의 여러 필드 간의 상호작용을 검증합니다. 이러한 validator를 통해 데이터의 무결성을 보장하며, 유효성 검사 규칙을 코드에 통합하여 잘못된 데이터를 방지할 수 있습니다.

Pydantic v2에서 제공하는 model_validator와 field_validator는 각각 모델 전체와 개별 필드 수준에서 유효성을 검사하는 데 사용됩니다.

model_validator

  • 적용 범위: 모델 수준에서 작동
  • 용도: 여러 필드를 함께 검증하거나, 모델 전체가 초기화된 후 특정 검증 로직을 실행
  • 사용 예시: 서로 연관된 필드들 간의 일관성을 보장해야 할 때 유용
from pydantic import BaseModel, model_validator

class User(BaseModel):
    password: str
    confirm_password: str
    
    @model_validator(mode='after')
    def check_passwords(cls, values):
        if values['password'] != values['confirm_password']:
            raise ValueError('비밀번호가 일치하지 않습니다.')
        return values

# 사용 예시
user = User(password="secret", confirm_password="secret")  # 유효

 

field_validator

  • 적용 범위: 개별 필드에 적용
  • 용도: 각 필드의 값에 대해 개별적으로 유효성을 검사
  • 사용 예시: 특정 필드 값에 대해 포맷팅이나 제약을 적용할 때 유용
from pydantic import BaseModel, field_validator

class User(BaseModel):
    name: str
    age: int
    
    @field_validator('age')
    def check_age(cls, v):
        if v < 18:
            raise ValueError('나이는 18세 이상이어야 합니다.')
        return v

# 사용 예시
user = User(name="Alice", age=20)  # 유효

 

+) 지정한 데이터 타입과 다르게 들어왔을때 처리도 가능하다.

from pydantic import BaseModel, field_validator

class Prompt(BaseModel):
    prompt: str
    
    @field_validator('prompt', mode="before")
    @classmethod
    def validate_prompt(cls, value):
        if value is None:
            value = ""
        return value

# 사용 예시
prompt = Prompt(prompt=None)