Русский
Открыть в Telegram

Пост Pydantic V2: Забываем root_validator, используем model_validator правильно

16 января 2026
Б
Библиотека Python разработчика | Книги по питону
Pydantic V2: Забываем root_validator, используем model_validator правильно Переход на Pydantic V2, это не только ускорение за счет ядра на Rust, но и переосмысление валидации. Самая частая боль при миграции, проверка зависимостей между несколькими полями. В V1 мы использовали root_validator и работали со словарем values (прощай, автодополнение IDE). В V2 правильный путь - model_validator в режиме after. В чем соль? В режиме mode='after' валидация запускается после того, как поля были распаршены и приведены к типам. Вы работаете с экземпляром класса (self), а не с сырым словарем. Пример (валидация периода дат): from pydantic import BaseModel, model_validator from datetime import datetime class DateRange(BaseModel): start_dt: datetime end_dt: datetime @model_validator(mode='after') def check_dates_order(self): # Обращаемся через self — IDE видит поля и их типы! if self.end_dt <= self.start_dt: raise ValueError("Дата окончания должна быть позже начала") return self # Тест try: DateRange( start_dt="2024-01-01T12:00:00", end_dt="2023-01-01T12:00:00" ) except ValueError as e: print(e) Нюансы для профи: 1. mode='before': Используйте только если вам нужно модифицировать сырые входные данные (например, JSON) до того, как Pydantic начнет их парсить. Это аналог pre=True из V1. 2. Производительность: Валидаторы на Python, это узкое горлышко. Если у вас HighLoad, старайтесь выразить ограничения через Field (например, ge, le), так как они отрабатывают на Rust-уровне, что значительно быстрее вызова python-функции. Используйте возможности типизации на 100%. #pydantic #fastapi #bestpractices #python 📲 Мы в MAX 👉@BookPython
14 · 2.5K ·

Рядом в ленте

ББиблиотека Python разработчика | Книги по питонуStructured Concurrency в Python 3.11+ (TaskGroup vs Gather) Если вы до сих пор используете asyncio.gather() для запуска конкурентных задач, вы, вероятно, теряетББиблиотека Python разработчика | Книги по питонуСписковые включения (list comprehensions) могут содержать несколько операторов for и if: In : [(x, y) for x in range(3) for y in range(3)] Out: [ (0, 0), (0, 1)
это сообщение
ББиблиотека Python разработчика | Книги по питону🐍 Как улучшить читаемость кода в Python? Читаемый код - это не роскошь, а необходимость. Если ваш код трудно понять, даже если он работает, это плохой код. СегоББиблиотека Python разработчика | Книги по питону📌 Декораторы в Python: как они работают и зачем нужны? Сегодня я покажу вам, как работают декораторы в Python и зачем они вообще нужны. Декораторы позволяют изм
ББиблиотека Python разработчика | Книги по питонуБиблиотека Python разработчика | Книги по питону@BookPython · канал · Технологии
17 943подписчиков725средний охват поста
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем