Het probleem doet zich voor wanneer men probeert pydantische modellen te genereren voor Schildpad ORM is geïnitialiseerd. Als je kijkt naar basic pydantic voorbeeld zul je zien dat alle pydantic_model_creator
worden naar . genoemd Tortoise.init
.
De voor de hand liggende oplossing is om pydantische modellen te maken na de initialisatie van Tortoise, zoals:
await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
await Tortoise.generate_schemas()
Event_Pydantic = pydantic_model_creator(Event)
Of een handiger manier, gebruik early model init door middel van Tortoise.init_models()
. Vind ik leuk:
from tortoise import Tortoise
Tortoise.init_models(["__main__"], "models")
Tournament_Pydantic = pydantic_model_creator(Tournament)
In dit geval is het belangrijkste idee om pydantic- en db-modellen op te splitsen in verschillende modules, zodat het importeren van de eerste niet leidt tot het maken van de tweede van tevoren. En zorg ervoor dat u Tortoise.init_models()
. aanroept voordat u pydantische modellen maakt.
Een meer gedetailleerde beschrijving met voorbeelden is te vinden hier .