如何解决如何在python中使用graphene-pydantic和graphene在子类中使用pydantic模型?
用例场景
我有两个 pydantic 模型。每个在他自己的模块(文件)中。一种模型,TUser 取决于 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]
如果我使用 TUser 模型知道我的 PydanticObjectType
class UserType(PydanticObjectType):
class Meta:
model = TUser
我收到以下错误消息:
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'>)
使用来自相互依赖的不同模块的pydantic模型时似乎存在问题。 这个用例的解决方案是什么?
有什么想法吗?
解决方法
错误消息为您提供了所需的提示。
Don't know how to convert the Pydantic field ModelField(name='address'....
发生的事情是 Graphene 不知道如何转换地址类以便能够将它与 TUser
一起使用,因为它是 PydanticObject
的一部分。
为了摆脱你的错误,你需要定义一个PydanticObjectType
引用TAddress
,这样Graphene就会知道这两个对象之间是什么关系。
在具有 UserType
的架构文件中,只需执行以下操作:
class AddressType(PydanticObjectType):
class Meta:
model = TAddress
class UserType(PydanticObjectType):
class Meta:
model = TUser
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。