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?