Использование 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
☢️Título: Heavenly Delusion — ( Tengoku Daimakyou )
✔️Capítulos: 13
✔️Calidad: #720p
✔️Género: #Aventura#Acción#Drama#Ciencia_Ficción#Seinen
✔️Idioma: #Japonés_Sub_Español🇯🇵
🀄️Sinopsis:
Dentro de la seguridad de los muros, los jóvenes son criados en un entorno de guardería por robots. Aunque la vida allí puede parecer rancia en la superficie, los niños están llenos de potencial y curiosidad. En muchos sentidos, es como un trozo de cielo. El mundo exterior es un infierno. Casi no hay nada mecánico y está habitado por extraños y poderosos seres sobrenaturales. Maru, con la ayuda de Kiruko, está ahí fuera atravesando lo que una vez fue Tokio por el cielo. Pero después de buscar durante tanto tiempo, quizá el cielo sea más un sueño insostenible que una realidad potencial.
⚠️Versión Doblaje Español Latino Aquí 👇
https://t.me/Animes480pFinalizados/23835
📤Apoyame Aquí 👈
@directorioplusultra
☢️Título: Heavenly Delusion — ( Tengoku Daimakyou )
✔️Capítulos: 13
✔️Calidad: #720p
✔️Género: #Aventura#Acción#Drama#Ciencia_Ficción#Seinen
✔️Idioma: #Español_Latino🇲🇽
🀄️Sinopsis:
Dentro de la seguridad de los muros, los jóvenes son criados en un entorno de guardería por robots. Aunque la vida allí puede parecer rancia en la superficie, los niños están llenos de potencial y curiosidad. En muchos sentidos, es como un trozo de cielo. El mundo exterior es un infierno. Casi no hay nada mecánico y está habitado por extraños y poderosos seres sobrenaturales. Maru, con la ayuda de Kiruko, está ahí fuera atravesando lo que una vez fue Tokio por el cielo. Pero después de buscar durante tanto tiempo, quizá el cielo sea más un sueño insostenible que una realidad potencial.
⚠️Versión Subtitulada Aquí 👇
https://t.me/Animes480pFinalizados/23819
📤Apoyame Aquí 👈
@directorioplusultra
☢️Título: Hakozume: Kouban Joshi No Gyakushuu — (Police In A Pod)
✔️Capitulos: 13
✔️Calidad: #720p
✔️Género: #Comedia#Drama#Policial#Seinen#Recuentos_de_la_Vida
✔️Idioma: #Japonés_Sub_Español
🀄️Sinopsis:
La oficial de policía Kawai tenía suficiente de una carrera en la que ni siquiera estaba y estaba a punto de entregar su registro, cuando sucedió lo impensable: ¡conoció a la nueva directora de su estación! Y después de pasar un poco de tiempo con este magnífico modelo a seguir, Kawai se da cuenta de que, después de todo, tal vez no haya terminado de ser oficial.
📤Apoyame Aquí 👈
@Animes480pFinalizados