En pydantic, hay una forma más limpia de excluir múltiples campos del modelo, algo como:
class User(UserBase): class Config: exclude = ['user_id', 'some_other_field']Soy consciente de que lo siguiente funciona, pero estaba buscando algo más limpio como Django.
class User(UserBase): class Config: fields = {'user_id': {'exclude':True}, 'some_other_field': {'exclude':True} }Pydantic excluirá las variables de clase que comienzan con un guión bajo. entonces, si se ajusta a su caso de uso, puede cambiar el nombre de sus atributos.
class User(UserBase): _user_id=str some_other_field=str ....Escribí algo como esto para mi json:
from pydantic import BaseModel class CustomBase(BaseModel): def json(self, **kwargs): include = getattr(self.Config, "include", set()) if len(include) == 0: include = None exclude = getattr(self.Config, "exclude", set()) if len(exclude) == 0: exclude = None return super().json(include=include, exclude=exclude, **kwargs) class User(CustomBase): name :str = ... family :str = ... class Config: exclude = {"family"} u = User(**{"name":"milad","family":"vayani"}) print(u.json())puede anular dict y otro método como.
Una posible solución es crear una nueva clase basada en la clase base usando create_model:
from pydantic import BaseModel, create_model def exclude_id(baseclass, to_exclude: list): # Here we just extract the fields and validators from the baseclass fields = baseclass.__fields__ validators = {'__validators__': baseclass.__validators__} new_fields = {key: (item.type_, ... if item.required else None) for key, item in fields.items() if key not in to_exclude} return create_model(f'{baseclass.__name__}Excluded', **new_fields, __validators__=validators) class User(BaseModel): ID: str some_other: str list_to_exclude = ['ID'] UserExcluded = exclude_id(User, list_to_exclude) UserExcluded(some_other='hola')Que regresará:
> UserExcluded(some_other='hola')Que es una copia de la clase base pero sin parámetro 'ID'.
Si tiene la identificación en los validadores, es posible que también desee excluir esos validadores.