graphene-pydantic
graphene-pydantic copied to clipboard
Model inheritance does not convert correctly
Use Case Scenario
I've two pydantic models. Each in his own module (file). One Model, the TUser depends on the TAddress.
address_model.py
class TAddress(BaseModel):
id: Optional[int]
address: Optional[constr(max_length=100, strip_whitespace=True)]
city: Optional[constr(max_length=80, strip_whitespace=True)]
postal_code: Optional[constr(max_length=15, strip_whitespace=True)]
country: Optional[constr(max_length=3)]
user_model.py
class TUser(BaseModel):
id: UUID = None
email: Optional[EmailStr]
address: Optional[TAddress]
is_active: Optional[bool]
is_email_verified: Optional[bool]
created_at: Optional[datetime.datetime]
If I use the TUser model know for my PydanticObjectType
class UserType(PydanticObjectType):
class Meta:
model = TUser
I get the following error message:
graphene_pydantic.converters.ConversionError: Don't know how to convert the Pydantic field ModelField(name='address', type=Optional[TAddress], required=False, default=None) (<class 'app.address.serializers.TAddress'>)
It seems like that there is a problem when using pydantic models from different modules that depends on each other. What is the solution for this use case?
Any idea?
You have to declare also TAddress as a PydanticObjectType class.
models are located in directory schemas
schemas/taddress.py
schemas/tuser.py
grapql_models are located in graphql_models
graphql_models/models.py
from app import schemas
class TAddress(PydanticObjectType):
class Meta:
model = schemas. TAddress
class TUser(PydanticObjectType):
class Meta:
model = schemas.TUser`