Декоратор model_validator
Декоратор model_validator применяется к методу внутри класса модели Pydantic.
Он позволяет валидировать сразу всю модель, а не отдельные её поля.
Функция получает на вход словарь значений или экземпляр модели,
а возвращает либо преобразованный словарь, либо саму модель.
Параметр mode задаёт момент запуска валидатора:
'before' - до валидации полей, 'after' - после.
Это удобно для проверки взаимосвязей между полями.
Синтаксис
@model_validator(mode='after')
def method_name(self):
...
return self
Пример
Давайте проверим, что пароль и его подтверждение совпадают:
from fastapi import FastAPI
from pydantic import BaseModel, model_validator
app = FastAPI()
class User(BaseModel):
password: str
confirm: str
@model_validator(mode='after')
def check_passwords(self):
if self.password != self.confirm:
raise ValueError('passwords do not match')
return self
@app.post('/user')
def create_user(user: User):
return {'password': user.password}
При совпадении паролей результат выполнения кода:
{"password": "abcde"}
Пример
Режим 'before' позволяет преобразовать данные до валидации полей:
from fastapi import FastAPI
from pydantic import BaseModel, model_validator
app = FastAPI()
class Article(BaseModel):
title: str
views: int
@model_validator(mode='before')
@classmethod
def set_default_title(cls, data):
if 'title' not in data:
data['title'] = 'article'
return data
@app.post('/article')
def create_article(article: Article):
return {'title': article.title, 'views': article.views}
Результат выполнения кода для тела запроса {"views": 5}:
{"title": "article", "views": 5}
Смотрите также
-
декоратор
field_validator,
который валидирует отдельное поле модели -
метод
model_validate,
который валидирует данные и создаёт модель -
метод
model_validate_json,
который валидирует JSON-строку и создаёт модель -
класс
BaseModel,
который является базой для всех моделей Pydantic