惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

PCI Perspectives
PCI Perspectives
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
T
The Blog of Author Tim Ferriss
罗磊的独立博客
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
Recorded Future
Recorded Future
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
Recent Announcements
Recent Announcements
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Apple Machine Learning Research
Apple Machine Learning Research
T
Threatpost
The GitHub Blog
The GitHub Blog
M
MIT News - Artificial intelligence
Scott Helme
Scott Helme
P
Palo Alto Networks Blog
T
Tenable Blog
P
Privacy International News Feed
V
Visual Studio Blog
F
Fortinet All Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
I
Intezer
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
AI
AI
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
S
Security Affairs
S
SegmentFault 最新的问题
C
Cisco Blogs
博客园 - 聂微东
MyScale Blog
MyScale Blog
V
Vulnerabilities – Threatpost
量子位
T
The Exploit Database - CXSecurity.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Security Latest
Security Latest
P
Proofpoint News Feed
阮一峰的网络日志
阮一峰的网络日志
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
The Last Watchdog
The Last Watchdog

Python

哪位朋友帮忙用 mac 测试下我的 Python 脚本 - V2EX 用 GPT5.6 填了之前的坑:在线的 Python 编辑器和运行终端 - V2EX 为什么这段 cuda 的并行前缀算法不会数据竞争 - V2EX 怎么搞定纯 Python 代码解码 jpg 图片,要求无外部依赖 - V2EX 使用 kkRepo 搭建 Python PyPI 私服 - V2EX Python WebSocket 长连接到底怎么写才稳? - V2EX 小白求推荐人工智能学习的网课 humanize-text 一个开源的 AI 文本拟人化工具集 9.9 元起!跨境卖家疯抢的纯净住宅 IP 辣椒 HTTP,到底有多香? 从会议录音到知识库全自动:我把数百段录音做成了可 RAG 问答的 Wiki(附开源代码) CodexSaver:在不让 Codex 变笨的前提下,让它更便宜。 [开源] 我正在用 Python 复刻经典游戏红色警戒 2 有准确绘制缠论中枢的 Python 代码借鉴么 做了一个面向张量计算的语言,可从 Python 调用,支持显式索引和自动求导 - V2EX 把电脑伪装成电视,用 DLNA 投屏拿到视频号直播流地址 - V2EX 爬虫开发工作中,你们是如何基于 AI 进行提效的? - V2EX 发现 Python 一个有意思的小特性,发现很合适搞成面试题。问了 AI 都不行:),欢迎来挑战~ - V2EX 大型 Python 开源项目都不会对变量进行类型注解? - V2EX 使用 pycharm 开发 Python ,自定义代码风格,并实时提示 - V2EX 创造了 uv 的 Astral 公司被 OpenAI 收购 - V2EX 慎用 PyCharm Remote Development 功能 - V2EX Python 3.15 JIT 的最新进展,已经有大概 5%的性能提升了 - V2EX [开源] 做了个 feishu-docx,把飞书知识库变成 AI 更容易读写和管理的内容源,方便给 Agent 用 - V2EX 开源项目: clawOS 解决 openclaw 文件系统,一键安装 - V2EX 我用免费 A 股数据做了几个工具,欢迎一起开源! - V2EX 分享一个完全免费的中国 A 股数据获取库 - V2EX AI 应用(如 RAG)背景下,如何选择非关系型数据库 - V2EX Python 3.15 将引入一个很方便的语法: Unpacking in Comprehensions - V2EX clawOS 解决 openclaw 文件系统交互过于抽象问题 - V2EX [开源] pyruns - 给 Python 脚本加个 Web UI,管理批量实验任务 - V2EX 我开源了 Python 版本的 pi-mono(OpenClaw 的底层组件) - V2EX 5090 本地部署 Dify+Blender+ComfyUI,求老哥协助打通链路 - V2EX 求解, PyInstaller 为什么在 GithubAction 上打包后体积比在本地大 5 倍(Mac arm 端) - V2EX 使用 Python 一键发推 - V2EX 在 Python 中复现 Race Condition [踩坑] A 股开盘把 Python 搞挂了,怒切 Go 重写行情网关 (附 pprof 分析 + 源码) - V2EX 有个视频网站学习的时候不点暂停或者视频学完,就一直没有任何包,也没有心跳包,也不会更新视频学习进度学时。 - V2EX 基于 Pydantic-Resolve 和 FastAPI-Voyager 的 Clean Architecture 实践 -- 一套面向复杂业务场景的 Python Web 开发方法论 - V2EX 学习能力不是很强 现在需要学 py 有什么好的推荐吗? - V2EX Python 有没有 subprocess 的替代品,被 subprocess 折腾死了. - V2EX 问个汉字处理的问题 - V2EX 有哪些 Python 3.14 Free-Threading 多线程性能分析方案? - V2EX 招募一位 FastAPI 工程师,作为技术伙伴 为什么 Python 的包管理这么难用,比 node 的 npm 难用一万倍,每次进入项目都要手动执行一下 conda activate xxx,难道就没有默认的 Python 项目级别的依赖吗? - V2EX 网上找了个流出的 Python 程序,想过下是否被污染了 都有什么推荐的办法啊? 有感于 Golang,如何用 3~5 个问题,识别 Python 开发者的技术素养? - V2EX fastapi tortoise orm 前端管理框架有哪个好用的 - V2EX 用 Python 写了个异步 MCP Filesystem,小而简,欢迎拍砖 Neovim 的代码检查、补全问题 - V2EX 请教一个关于电报机器人的问题 - V2EX 帮你选择最快的 pip 镜像,告别安装慢 - V2EX hishel 升级 1.0.0 导致使用 pdm 项目构建失败 - V2EX 开源一个 Python JA3 请求库。可以自定义 JA3 指纹并且内置 1200 多个 JA3 指纹。 Arm64 安装 PyQt5/6,只能选 conda 吗? - V2EX Python 爬虫微框架 web-craft - V2EX 请教各位佬们一个奇怪的后端相关的技术问题 - V2EX 迭代器的实际应用场景是什么? 小白求问,刚接触编程领域有什么速成的方式学习吗,学基础阶段并不太想去系统学习. - V2EX 𝜋thon ( Python 3.14) Python 3.14 已发布 fastapi-router-viz, 可视化你的 API 内依赖关系 yfinance 获取数据总是 too many request 无法获取价格啊 小白求问,应聘 AI 算法工程师这类岗位应该有什么基础知识
小白求教个循环导入的问题 - V2EX
dylyft · 2025-11-10 · via Python

最近刚开始学 python 和 fastapi, 按照 fastapi 教程学习时遇到个问题, 因为使用 sqlmodel 的 relationship, 导致两个模型文件相互导入, 然后报错了, 根据官方文档的解决办法, 使用 TYPE_CHECKING 和字符串版本类型后暂时解决了报错.
但是当接口通过 response_model 指定了数据模型(非表模型)作为返回类型时, 又出现了报错, 报错提示如下:

`TypeAdapter[typing.Annotated[app.models.teams.TeamPublicWithUser, FieldInfo(annotation=TeamPublicWithUser, required=True)]]` is not fully defined; you should define `typing.Annotated[app.models.teams.TeamPublicWithUser, FieldInfo(annotation=TeamPublicWithUser, required=True)]` and all referenced types, then call `.rebuild()` on the instance.

求各位大佬帮忙看看, 哪里有问题. python 版本用的是 3.12, 具体代码如下
models/users.py

from typing import TYPE_CHECKING, Any, Optional

from sqlmodel import Field, Relationship, SQLModel

if TYPE_CHECKING:
    from .teams import Team, TeamPublic


class UserBase(SQLModel):
    username: str = Field(index=True, max_length=255, unique=True)
    email: str | None = Field(default=None, index=True, max_length=255)
    is_active: bool = True
    is_superuser: bool = False
    full_name: str | None = Field(default=None, max_length=255)
    team_id: int | None = Field(default=None, foreign_key="team.id")


class User(UserBase, table=True):
    id: int | None = Field(default=None, primary_key=True)
    hashed_password: str
    team: Optional["Team"] = Relationship(back_populates="members")


class UserPublic(UserBase):
    id: int


class UserPublicWithTeam(UserPublic):
    team: Optional["TeamPublic"] = None

models/teams.py

from typing import TYPE_CHECKING, Any, List

from sqlmodel import Field, Relationship, SQLModel

if TYPE_CHECKING:
    from .users import User, UserPublic


class TeamBase(SQLModel):
    name: str = Field(max_length=255)


class Team(TeamBase, table=True):
    id: int | None = Field(default=None, primary_key=True)
    members: List["User"] = Relationship(back_populates="team")


class TeamPublic(TeamBase):
    id: int


class TeamPublicWithUser(TeamPublic):
    members: List["UserPublic"] = []

router/users.py

# 用户相关接口
from sqlmodel import and_, select

from app.api.deps import SessionDep
from app.models.users import (
    User,
    UserPublicWithTeam,
)
from app.new_router import new_router

router = new_router(prefix="/users", tags=["用户管理"])


@router.get("/{id}", summary="获取用户详情", response_model=UserPublicWithTeam)
async def get_user_api(db: SessionDep, id: int):
    user = db.exec(select(User).where(and_(User.id == id, User.is_active))).first()
    return user

router/teams.py

# 团队相关接口
from sqlmodel import select

from app.api.deps import SessionDep
from app.models.teams import (
    Team,
    TeamPublicWithUser,
)
from app.new_router import new_router

router = new_router(prefix="/teams", tags=["团队管理"])


@router.get("/{id}", summary="获取团队详情", response_model=TeamPublicWithUser)
async def get_team_api(db: SessionDep, id: int):
    team = db.exec(select(Team).where(Team.id == id)).first()
    return team