Использование 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
Obey Me!
📅Año 2021
País Japón
🎼Música Otome Game
🎬Productora Colored-Pencil Animation Design
Género#SeriedeTV#Animación#Comedia#Fantasía#SerieOnline
Sinopsis
Los hermanos Lucifer, Mammon, Leviathan, Satan, Asmodeus, Beelzebub y Belphegor se encuentran entre los demonios más poderosos de Devildom, sirviendo como oficiales en el consejo estudiantil de la Royal Academy of Diavolo (RAD). Sin embargo, al ser avatares de los siete pecados capitales, sus comportamientos suelen tender al extremo. Sus travesuras cotidianas desmienten su alto estatus y su temible reputación entre otros de su especie. Cuando se ven detrás de escena, los miembros de esta familia son más adorables y ridículos de lo que parecen a primera vista.
⏱Duración 5 min.
🖥Resolución 720x400
🗣Idioma Japonés
Subtítulos Latino
Episodio01 - 02 - 03
Suscripción a este Anime 👉🏻Aquí
Índice de Animaciones 👉🏻Aquí
Obey Me!
📅Año 2021
País Japón
🎼Música Otome Game
🎬Productora Colored-Pencil Animation Design
Género#SeriedeTV#Animación#Comedia#Fantasía#SerieOnline
Sinopsis
Los hermanos Lucifer, Mammon, Leviathan, Satan, Asmodeus, Beelzebub y Belphegor se encuentran entre los demonios más poderosos de Devildom, sirviendo como oficiales en el consejo estudiantil de la Royal Academy of Diavolo (RAD). Sin embargo, al ser avatares de los siete pecados capitales, sus comportamientos suelen tender al extremo. Sus travesuras cotidianas desmienten su alto estatus y su temible reputación entre otros de su especie. Cuando se ven detrás de escena, los miembros de esta familia son más adorables y ridículos de lo que parecen a primera vista.
⏱Duración 5 min.
🖥Resolución 720x400
🗣Idioma Japonés
Subtítulos Latino
Episodio01 - 02 - 03
Suscripción a este Anime 👉🏻Aquí
Índice de Animaciones 👉🏻Aquí