我正在使用 FastAPI 和 Pydantic 开发应用程序,在尝试定义数据模型时遇到循环导入问题。
以下是相关文件:
from typing import List
from pydantic import BaseModel
from src.schemas.blog import ShowBlog # Import causing circular dependency
class ShowUser(BaseModel):
username: str
email: str
blogs: List[ShowBlog]
class Config:
from_attributes = True
class User(BaseModel):
username: str
email: str
password: str
from pydantic import BaseModel
from src.schemas.user import ShowUser # Import causing circular dependency
class Blog(BaseModel):
title: str
description: str
user_id: int
class ShowBlog(BaseModel):
id: int
title: str
description: str
written_by: ShowUser
class Config:
from_attributes = True
当我运行应用程序时,我收到以下错误:
ImportError: cannot import name 'ShowBlog' from partially initialized module 'src.schemas.blog' (most likely due to a circular import)
如何解决此循环导入问题,同时保持 FastAPI 应用程序的结构化?是否有组织 Pydantic 模型以避免此类问题的最佳实践?
我在使用 SQLModel 和 fastapi 时遇到了类似的问题。这对我有用:将模式文件之一中的依赖项替换为引号中的名称,并且不要将其导入那里:
from typing import List
from pydantic import BaseModel
class ShowUser(BaseModel):
username: str
email: str
blogs: List["ShowBlog"]
class User(BaseModel):
username: str
email: str
password: str
这似乎也适用于您的示例!