Pydantic .from_orm() auto data conversation

Viewed 424

I have some tables with data, and I want to return to the user, not a phone object, a string. There is an example.

import pydantic
import sqlalchemy
from typing import Optional

class Base(pydantic.BaseModel):
    class Config:
        orm_mode = True


class PhoneOrm:
    id = sqlalchemy.Column(
        sqlalchemy.Integer,
        primary_key=True
    )
    number = sqlalchemy.Column(
        sqlalchemy.String(length=16)
    )

    def __str__(self):
        return f"+{self.number}"


class PhoneModel(Base):
    id: int
    number: str = pydantic.Field(min_length=12, max_length=16)

    def __str__(self):
        return f"+{self.number}"


class UserOrm:
    id = sqlalchemy.Column(
        sqlalchemy.Integer,
        primary_key=True
    )
    name = sqlalchemy.Column(
        sqlalchemy.String(length=128)
    )
    phone_id = sqlalchemy.Column(
        sqlalchemy.Integer,
        sqlalchemy.ForeignKey('phone.id', ondelete='cascade')
    )
    phone = sqlalchemy.orm.relationship(
        "PhoneOrm",
        uselist=False,
    )


class UserModel:
    id: int
    name: str
    phone: Optional[str]


phone = PhoneOrm('799999999999')
user = UserOrm(name='John', phone=phone)

print(UserModel.from_orm(user)) 

I catch an exception

1 validation error for UserModel
   phone
      str type expected (type=type_error.str)

But all phone classes have datatype conversation

I want to get {'id': 1, 'name': 'John', 'phone': '799999999999'}

How can I do that?

0 Answers
Related