РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
183 of 307 menu

Декоратор 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
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить