You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Tortoise的pydantic_queryset_creator生成模型添加查询注解字段?

解决方法

问题出在pydantic_queryset_creator生成的模型默认使用__root__字段包裹查询集列表,直接继承该模型新增字段会触发冲突。你可以通过先定义包含额外字段的单个模型,再基于它生成查询集模型的方式解决,无需重写整个BaseModel。

方法一:继承基础单个模型添加字段

  1. 先生成单个对象的基础Pydantic模型:
from tortoise.contrib.pydantic import pydantic_model_creator

# 生成EquipmentCategory对应的基础单个模型
EquipmentCategoryBase = pydantic_model_creator(EquipmentCategory)
  1. 继承基础模型,新增equipment_count字段:
class EquipmentCategoryWithCount(EquipmentCategoryBase):
    equipment_count: int
  1. 基于自定义单个模型生成查询集模型:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:01:20