如何为Tortoise的pydantic_queryset_creator生成模型添加查询注解字段?
解决方法
问题出在pydantic_queryset_creator生成的模型默认使用__root__字段包裹查询集列表,直接继承该模型新增字段会触发冲突。你可以通过先定义包含额外字段的单个模型,再基于它生成查询集模型的方式解决,无需重写整个BaseModel。
方法一:继承基础单个模型添加字段
- 先生成单个对象的基础Pydantic模型:
from tortoise.contrib.pydantic import pydantic_model_creator # 生成EquipmentCategory对应的基础单个模型 EquipmentCategoryBase = pydantic_model_creator(EquipmentCategory)
- 继承基础模型,新增
equipment_count字段:
class EquipmentCategoryWithCount(EquipmentCategoryBase): equipment_count: int
- 基于自定义单个模型生成查询集模型:
from tortoise.contrib.pydantic import pydantic_queryset_creator # 指定model参数为带额外字段的单个模型 EquipmentCategoryListPydantic = pydantic_queryset_creator( EquipmentCategory, model=EquipmentCategoryWithCount )
方法二:直接在模型生成时添加自定义字段
无需继承,直接通过custom_fields参数给单个模型注入字段:
from tortoise.contrib.pydantic import pydantic_model_creator, pydantic_queryset_creator # 生成包含equipment_count的单个模型 EquipmentCategoryWithCount = pydantic_model_creator( EquipmentCategory, custom_fields=[("equipment_count", int, None)] ) # 生成对应的查询集模型 EquipmentCategoryListPydantic = pydantic_queryset_creator( EquipmentCategory, model=EquipmentCategoryWithCount )
使用时直接用生成的查询集模型序列化查询结果即可:
serialized_categories = EquipmentCategoryListPydantic.from_orm(categories)
内容的提问来源于stack exchange,提问作者Denis Khamitov
相关产品推荐
相关产品推荐

