Использование Pydantic сегодня стало нормой, и это правильно. Но иногда на ревью вижу, что используют его не всегда корректно.
Например, метод BaseModel.model_dump() по умолчанию не преобразует стандартные типы, такие как datetime, UUID или Decimal, в простой сериализуемый для JSON вид. Тогда пишут кастмоный сериализатор для этих типов чтобы функция json.dump() не падала с ошибкой.
import uuid
from datetime import datetime
from decimal import Decimal
from uuid import UUID
from pydantic import BaseModel
class MyModel(BaseModel):
id: UUID
date: datetime
value: Decimal
obj = MyModel(
id=uuid.uuid4(),
date=datetime.now(),
value='1.23'
)
print(obj.model_dump())
# не подходит для json.dump
# {
# 'id': UUID('4f8c1bc4-25fd-40cd-9dbe-2c73639b0dc1'),
# 'date': datetime.datetime(2025, 12, 12, 12, 12, 12, 111111),
# 'value': Decimal('1.23')
# }
# добавляем свой кастомный сериализатор
json.dumps(obj.model_dump(), cls=MySerializer)
# {
# 'id': '4f8c1bc4-25fd-40cd-9dbe-2c73639b0dc1',
# 'date': '2025-12-12T12:12:12.111111',
# 'value': '1.23'
# }
В данном случае класс MySerializer обрабатывает datetime, UUID и Decimal. Например так:
class MySerializer(json.JSONEncoder):
def default(self, o):
if isinstance(o, Decimal):
return str(o)
elif isinstance(o, datetime):
return o.isoformat()
elif isinstance(o, UUID):
return str(o)
return super().default(o)
Специально для тех, кто всё еще так делает - в этом нет необходимости!
Pydantic может это сделать сам, просто нужно добавить параметр mode="json".
json.dumps(obj.model_dump(mode="json"))
# {
# 'id': '4f8c1bc4-25fd-40cd-9dbe-2c73639b0dc1',
# 'date': '2012-12-12T12:12:12.111111',
# 'value': '1.23'
# }
#pydantic#libs
📸Распаковка Waizowl Triaina - в наличии!
🔵Два цвета: Белая-Riptide и Черная-Abyss.
🔵Корпус сделан из композитного материала, а именно смеси Поликарбоната и Стекловолокна, максимальная прочность и жесткость корпуса.
🔵Вес 49 грамм, размеры 122x64x36 миллиметров. Симметричная форма с центральным расположением горба подойдет для следующих типов хвата и длины ладони: Когтеовой хват (17.5-20) Ладонный хват (16.5-18), Пальцевый хват (18.5-21).
🔵Внутри установлены новые Оптические переключатели TTC, энкодер TTC Gold, кастомный сенсор PAW3950 HAWKEYE, датчик с экстремальной производительностью и низким энергопотреблением Nordic 54L15.
Цена: 6.990₽ - на ReShip.pro🛍️
САЙТ • МЕНЕДЖЕР • #WAIZOWL
🔱НОВИНКА ОТ WAIZOWL🔱
— Бренд давно не радовал нас новинками и на днях представил свежую модель Waizowl Triaina:
🔵Два цвета: Белая-Riptide и Черная-Abyss.
🔵Корпус сделан из композитного материала, а именно смеси Поликарбоната и Стекловолокна, максимальная прочность и жесткость корпуса.
🔵Вес 49 грамм, размеры 122x64x36 миллиметров. Симметричная форма с центральным расположением горба подойдет для следующих типов хвата и длины ладони: Когтеовой хват (17.5-20) Ладонный хват (16.5-18), Пальцевый хват (18.5-21).
🔵Внутри установлены новые Оптические переключатели TTC, энкодер TTC Gold, кастомный сенсор PWA3950 HAWKEYE, датчик с экстремальной производительностью и низким энергопотреблением Nordic 54L15.
🥇Цена 8.390₽ 7.551₽ — Cкидка 10% на предзаказ до 30-го числа.
САЙТ • МЕНЕДЖЕР • #WAIZOWL
🦔Waizowl OGM Pro V2 Poseidon в наличии! Лимитированная расцветка которая не будет пополняться после солд аута.
🔵Сенсор PAW3950
🔵Переключатели оптические Omron
🔵Супер цепкое покрытие
🔵Донгл 8.000hz в комплекте
🔵Вес 49 грамм
— Эргономичная мышка средних размеров, горб в центре и небольшой наклон клавиш, подойдет для Ладонного и Когтевого хвата.
💵Цена: 8.790₽ на ReShip.pro
САЙТ • МЕНЕДЖЕР • #WAIZOWL
🛍️Новая лимитированная расцветка OGM Pro V2 — Poseidon уже скоро в ReShip!
Оформляй предзаказ прямо сейчас и получи скидку🔤
— Лимитированное издание - количество ограничено!
➖Цена: 8 490 ₽
➖Доступно на ReShip.pro
КАТАЛОГ • МЕНЕДЖЕР • #WAIZOWL
⏰WAIZOWL пополнили коллекцию OGM PRO V2 расцветкой POSEIDON!
☁️Сенсор PAW3950
☁️Переключатели оптические Omron
☁️Супер цепкое покрытие
☁️Донгл 8.000hz в комплекте
☁️Вес 49 грамм
— Уникальная эргономичная форма с детализированным дизайном богини, создана для Когтевого и Ладонного хвата
💳Цена со скидкой на предзаказ 8.490₽ — уже на ReShip.pro
КАТАЛОГ • МЕНЕДЖЕР • #WAIZOWL
🌸Waizowl OGM Pro V2 в расцветках Purple Fade и Blue Fade
🔘Сенсор PAW3950
🔘Переключатели Huano Transparent Green Shell White Dot
🔘Донгл 8к в комплекте
🔘Вес 49 грамм
Эргономичная мышка средних размеров, с высоким горбом по середине и высоким расположением клавиш, подойдет для средней и большой ладони (хват Ладонный/Когтевой)
💳Цена 7.990₽
ОФОРМИТЬ ЗАКАЗ • КАТАЛОГ • #WAIZOWL
🌒Переходи на темную сторону с Waizowl OGM Pro V2 HADES
🟡Сенсор PAW3950
🟡RAESHA Optical Switch
🟡Супер цепкое покрытие
🟡Донгл 8к в комплекте
🟡Вес 49 грамм
🌒Уникальная эргономичная форма с детализированным дизайном богини, не упустите шанс добавить этот шедевр в свою коллекцию всего за 8.790₽!
ОФОРМИТЬ ЗАКАЗ • КАТАЛОГ • #WAIZOWL
👑Мышка Waizowl Cloud XS с потрясающим дизайном, созданная с любовью к совам, уже в продаже!
~ Сенсор Paw3950
~ Оптические переключатели RAESHA
~ 8к донгл в комплекте
~ Вес 45 грамм
✨ Отлично подходит для ладонного и когтевого хвата, обеспечивая полную поддержку ладони и комфортное размещение пальцев по бокам.
ОФОРМИТЬ ЗАКАЗ • КАТАЛОГ • #WAIZOWL