FastAPI 和 Pydantic 模型的循环导入问题

问题描述 投票:0回答:1

我正在使用 FastAPI 和 Pydantic 开发应用程序,在尝试定义数据模型时遇到循环导入问题。

以下是相关文件:

src/schemas/user.py

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

src/schemas/blog.py

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 模型以避免此类问题的最佳实践?

python fastapi importerror circular-dependency
1个回答
0
投票

我在使用 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

这似乎也适用于您的示例!

© www.soinside.com 2019 - 2024. All rights reserved.