O problema ocorre quando se tenta gerar modelos pydantic antes O ORM da tartaruga é inicializado. Se você observar pydantic básico exemplo, você verá que todos os
pydantic_model_creator
são chamados depois Tortoise.init
. A solução óbvia é criar modelos pydantic após a inicialização do Tortoise, assim:
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
Event_Pydantic = pydantic_model_creator(Event)
Ou de uma maneira mais conveniente, use init do modelo inicial por meio de
Tortoise.init_models()
. Igual a:
from tortoise import Tortoise
Tortoise.init_models(["__main__"], "models")
Tournament_Pydantic = pydantic_model_creator(Tournament)
No caso, a ideia principal é dividir os modelos pydantic e db em módulos diferentes, para que a importação do primeiro não leve à criação do segundo antecipadamente. E certifique-se de chamar
Tortoise.init_models()
antes de criar modelos pydantic. Uma descrição mais detalhada com exemplos pode ser encontrada aqui .