尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

InvenTree 1.0 至 1.5 版本演进全解析:破坏性变更、核心新特性与升级迁移实战指南

InvenTree 1.0 至 1.5 版本演进全解析:破坏性变更、核心新特性与升级迁移实战指南 InvenTree 1.0 至 1.5 版本演进全解析破坏性变更、核心新特性与升级迁移实战指南【免费下载链接】InvenTreeOpen Source Inventory Management System项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree本文以 InvenTree 开源仓库根目录下的 CHANGELOG.md 为骨架系统梳理 InvenTree 从首个 1.0.0 稳定版到 1.5.0 及当前 Unreleased 分支的版本演进全貌逐条解读每一个 Breaking Changes破坏性变更、Added新增特性、Changed行为调整与 Removed移除项并结合 src/backend/InvenTree 下的源码实现与测试用例进行佐证。阅读本文后你将掌握 InvenTree 各版本的升级影响面、需要同步调整的外部 API 客户端兼容点、关键全局/用户设置项的含义与底层原理以及从旧版本安全升级到最新版的完整路径。CHANGELOG 是开源项目向使用者交付版本信息的第一载体。InvenTree 遵循 Keep a Changelog 规范与 Semantic Versioning语义化版本约定从 1.0.0 起按 Unreleased / Added / Changed / Removed / Breaking Changes 结构持续记录每一次重要变更。理解这份变更记录是评估升级风险、排查 API 兼容问题、判断新版本价值的最直接途径。一、Unreleased未发布分支预告数据库迁移压缩与 Notes 体系重构Unreleased 区块记录的是当前开发分支源码中 src/backend/InvenTree/InvenTree/version.py 显示软件版本为1.6.0 dev已合并但尚未正式发布的关键变更是判断下一个版本升级影响面的最佳参考破坏性变更数据库迁移全面压缩#12830在 1.0.0 正式版之前的所有历史数据库迁移被合并squash为一个。任何从早于 1.0.0 版本升级的用户必须先升级到 1.0.0 版本再升级到当前最新版本否则迁移链路不完整。Notes 机制全面重构#11971笔记Notes从各业务模型上的内联notes字段迁移到独立的数据库表与附件处理方式一致每个模型实例可关联多条笔记。各模型的notes字段及其对应 API 端点被移除统一通过新的/api/note/端点访问。现有笔记数据含内嵌图片会在迁移时自动转换到新表Markdown 内容被转换为 HTML。任何通过 API 读写notes字段的外部客户端应用都必须改用新端点。状态转换行为收紧#12507调用无效或重复的状态转换state transition现在会抛出ValidationError。实现状态转换的插件应评估该 PR 并调整自身用法以获得新的保护机制。这一行为在 src/backend/InvenTree/generic/states/transition.py 中有完整实现并在 src/backend/InvenTree/generic/states/test_transition.py 中通过test_fsm_invalid_transition_returns_false等测试用例予以验证。tags过滤器重命名#126721.4.0 新增的tags过滤器因与多模型上的tags字段重名而更名为tag_name。API 版本记录见 src/backend/InvenTree/InvenTree/api_version.py v534 条目同步说明了这一重命名。新增特性SCIM 2 用户供应支持#12713InvenTree 可集成外部身份提供方IdP进行用户管理API 版本 v536 条目同样记录了这一能力。OIDC 提供方设置接入 Admin Center#12731所有身份联邦Identity Federation设置集中到一处管理不再需要进入数据库后台操作。对应 API v542 新增了 oAuth2 提供方应用的管理 API。用户设置ROTATE_TABLE_HEADERS#12837将表格列头旋转 90 度提升长列名表格的可读性。该设置的定义位于 src/backend/InvenTree/common/setting/user.py类型为布尔值归属用户级设置。二、1.5.02026-08-11权限细化、MPTT 移除与迁移命令行为变更破坏性变更权限驱动的字段裁剪#12529用户不具备查看权限时API 端点上的相关详情字段related detail fields将被移除。这要求外部客户端对权限不足的响应做更健壮的处理。移除 StockItem 的 MPTT 树结构#12360从StockItem模型移除 MPTT mixin 及数据库中的自引用树结构。官方给出的理由是 MPTT 在部分操作中造成显著开销移除可简化模型并提升性能。任何依赖 MPTT 功能的外部客户端都需要适配。对应 API 版本 v521 条目。invoke migrate行为变更#12320invoke migrate命令默认不再自动生成新迁移只负责将已有迁移应用到数据库如需检测并生成新迁移必须显式加--detect标志。同时invoke update也不再生成新迁移只应用已有迁移以确保升级过程可预测、不引入意外的数据库结构变化。运行环境下限提升#12223不再支持 Python 3.11且不再为 Debian 11 与 Ubuntu 20.04 提供安装包。新增特性BOM 件按件数计量#12422BomItem模型新增piece_count字段用于表示按长度切割cut-to-length的零件所需材料总量按quantity × piece_count计算。对应 API v532。采购订单行合并默认值可配置新增全局设置PURCHASEORDER_MERGE_LINE_ITEMS该设置在 src/backend/InvenTree/common/setting/system.py 中定义实际生效于 src/backend/InvenTree/order/api.py 与 src/backend/InvenTree/order/serializers.py并有 src/backend/InvenTree/order/test_api.py 的测试用例验证其开启/关闭时行项目是否合并。订单行项目折扣#12393订单行项目新增discount属性可指定为百分比或固定金额在计算订单总额时作用于行项目小计。对应 API v524。订单行项目批量删除#12391新增针对订单行项目的批量删除能力并覆盖采购、销售、退货、调拨四种订单类型API v523。参数唯一性约束#12388Parameter与ParameterTemplate模型支持配置参数值唯一性要求——既可按模型类型限定唯一也可跨全部模型全局唯一。对应 API v522 新增unique字段。库存拆解Disassemble#12310基于库存件关联的 BOM将已组装的库存件拆解回各组成零件便于库存管理与追溯。API v520 新增了 stock items 的disassemble端点。表格预览抽屉#12117InvenTree 表格组件新增预览抽屉可在不离开表格视图的前提下查看选中行详情通过系统设置PREVIEW_DRAWER_ENABLED开关。内部零件价格导入#12341支持通过 API 导入内部零件价格API v518。Part 模型新增consumable字段#12295API v516。ProjectCode 模型新增active字段#12250API v513。行为调整Changed前端表单中的 table field 组件渲染 bug 修复#12274使用该组件的插件需更新其表单定义。三、1.4.02026-06-24安全加固SSRF 防护与 API 节流1.4.0 的核心关键词是安全多项变更围绕报告生成的 SSRF 防护与 API 限流展开。破坏性变更报告生成器默认禁止远程 URI#12160PDF 报告生成器加载远程 URIhttp:///https://现默认被阻止需通过系统设置REPORT_FETCH_URLS显式开启。file://类型的文件 URI 则始终被阻止资源必须以内嵌data:URI 形式到达 PDF 生成器。此举是为了避免允许远程 URL 抓取导致 SSRF 攻击面扩大。底层实现见 src/backend/InvenTree/report/fetcher.py当REPORT_FETCH_URLS关闭时InvenTreeURLFetcher会拦截并记录 blocked URL 日志src/backend/InvenTree/report/tests.py 中的test_fetch_urls_disabled_blocks_http测试则验证了关闭状态下任何 http/https URL 都会被阻止。设置项定义位于 src/backend/InvenTree/common/setting/system.py。SalesOrderStatusGroups枚举修正#12107修复 shipped 状态未被纳入 active 组的 bug现在 shipped 从 complete 组移至 active 组使用该枚举的外部客户端需同步调整。用户 API 端点重构#9604/api/user系列端点语义不再含糊。Node 环境升级至 24 LTS#11893仅影响自行构建前端资源的场景。默认开启 API 节流#11951为降低 DoS 攻击风险API 默认启用限流。可通过将INVENTREE_THROTTLE_ANON与INVENTREE_THROTTLE_USER设置为None环境变量或配置文件均可关闭。默认限流速率匿名用户每分钟 20 次请求已认证用户每秒 20 次请求。该机制的源码位于 src/backend/InvenTree/InvenTree/settings.pyTHROTTLE_ANON与THROTTLE_USER分别从INVENTREE_THROTTLE_ANON/INVENTREE_THROTTLE_USER环境变量读取默认值对应20/minute与60/second且仅在非 DEBUG 模式下才注入 DRF 的AnonRateThrottle/UserRateThrottle并支持none字符串关闭限流。新增特性报告渲染自定义 locale#12208支持为报告渲染指定自定义 locale控制日期、数字与货币的格式化方式。树形 API 动态过滤#12204PartCategoryTree与StockLocationTreeAPI 端点新增过滤选项可按需动态获取树数据API v511。PartCategory 参数支持#12165参数系统扩展到部件类别模型API v505。表格列级过滤#12103UI 表格视图支持按列直接应用过滤条件。PluginSetting 只读属性#12093API 返回read_only标记标识插件设置是否可被修改API v501。可保存的过滤器组#12079表格与日历视图支持保存、复用常用过滤配置。多模型标签#12077多个新模型类型新增tags字段并新增/api/tag/端点支持按标签过滤API v500。StockCount 支持指定库位#12019API v497。StockItem 新增creation_date只读字段#12011API v496。销售订单自动分配#12000新增后端 前端能力可基于库存排序与分配规则自动分配可用库存到销售订单行API v495。附件重命名#11920API v488。Part 新增maximum_stock与high_stock过滤#11914API v486。BomItem 新增raw_amount字段#11631API v485。全局设置控制序列化库存件删除#11872。多 BOM 批量替换组件#11861、BOM 对比#11853、BOM 多级子装配显示#11809均为 BOM 相关增强。采购订单行内联创建供应商零件#11778。笔记面板未保存离开警告#11772。插件模型自定义权限检查#11788若插件模型定义了check_user_permission类方法将调用它判定用户对该模型的查看权限适用于缺少标准 ruleset 定义的插件模型。项目整体权限判定入口可见 src/backend/InvenTree/users/permissions.py经 src/backend/InvenTree/InvenTree/permissions.py 调用。插件可定义主操作primary actions#9570。行为调整Changed通过 API 重启机器要求 staff 权限#12197。禁止对无查看权限的模型打印报告或标签#12142提升系统安全性。构建输出build output操作改为后台任务执行API 返回 task ID 供进度监控#11990相关异步任务机制贯穿 API v494、v465、v464。新增独立的bomruleset 与对应权限与聚焦部件管理的partruleset 分离#11825实现更细粒度的权限控制。BuildAPI 的issued_by字段改为只读创建构建时自动设为当前用户#11816。移除项Removed移除StockItem.review_needed字段#12071该字段从未暴露到 API 或任何业务逻辑属于无操作字段移除以简化模型。移除 Part API 的remote_image字段#11962出于对任意 URL 下载图片的安全顾虑改为使用新的download_image_from_urlAPI 端点API v489 同时移除了 Company API 上的对应字段。四、1.3.02026-04-11供应商主选切换与备份恢复护栏破坏性变更Part.default_supplier移除#11303Part模型上的default_supplier字段被移除改为在SupplierPart模型上使用primary字段标识某零件的默认供应商。使用旧字段的外部客户端需更新API v456。PostgreSQL 配置项拼写修正#11500tcp_keepalives_internal更名为tcp_keepalives_interval以匹配 PostgreSQL 官方配置名。使用 PostgreSQL 且自定义过该配置的用户需同步修改环境变量或配置文件。新增特性模板最后更新信息#11702标签与报告模板新增 last updated 与 updated by 字段API v475。数据导入向导暴露给插件#11685插件可从 UI 触发数据导入向导、执行自定义数据导入API v471 新增 SalesOrderShipment 的数据导入支持。订单行项目编号#11692外部订单采购、销售、退货行项目支持指定行号存储为字符串以兼容灵活格式如1、1.1、A。对应 API v473 在全部订单行项目端点新增line字段。SalesOrderShipment 自定义参数#11641API v469。后台任务状态监控端点#11527新增端点监控指定后台任务的状态API v464。默认表格过滤器#11405默认隐藏非活跃项用户主动筛选可覆盖默认过滤。自然键数据导入#11222无需知道对象内部数据库 ID 即可建立关联。ParameterTemplate 存在性过滤器#11383新增exists_for_model_id、exists_for_related_model、exists_for_related_model_id过滤器API v455。按构建输出自动分配可追溯项#10887API v457。备份/恢复元数据护栏#11372新增备份元数据 setter 与恢复元数据 validator降低误操作概率。订单新增updated_at字段#11374采购、销售、退货订单均支持API v460 还补充了updated_before/updated_after日期过滤与排序。表单保持打开选项#11074创建表单提交后保持对话框打开。行为调整Changed插件定义的数据记录可随数据库文件导入导出#11648。import_records/export_records系统命令在导出文件中加入元数据条目用于导入时兼容性检查#11630。移除项Removed批量操作的自定义过滤移除#11581通过 API 执行批量操作时不再允许指定任意过滤器——官方明确这构成显著安全风险且无既有用例需求。批量操作现在只能针对传入的主键列表工作。五、1.2.02026-02-12通用 Parameter 体系与统一 Metadata 端点破坏性变更参数模型全面泛化#10699移除PartParameter/PartParameterTemplate模型及其 API 端点替换为通用的Parameter/ParameterTemplate模型与端点。使用旧端点的外部客户端需更新API v430 同步移除旧端点并新增通用端点。同时ManufacturerPartParameter模型与端点一并移除。元数据端点统一#11035此前PartMetadata、SupplierPartMetadata等模型专属元数据端点全部移除改用单一通用端点API v436 显示为/api/metadata/model_name/旧端点以重定向兼容。新增特性BOM 与 Build Item 表格/API 新增 Category 列#10722。多个新模型类型获得参数支持#10699。报告生成器支持 PDF 输入控件#10969生成的 PDF 报告内可包含输入控件。参数管理 UI 全面改版#10699。行为调整Changed库存盘点stocktake功能改进#11257API v448 新增手动生成盘点条目的端点。移除项Removed随 Django 5.2 升级移除 Python 3.9 / 3.10 支持#10730。六、1.1.02025-11-02多平台支持与前端登录增强1.1.0 以新增能力为主无破坏性变更。报告order_queryset辅助函数#10439。SupplierMixin供应商数据导入#9761API v410 配套新增供应商搜索与导入端点。机器状态信息增强#10381API 端点提供更详细的机器状态API v401 增加 machine properties。构建输出部分完成/部分报废#10499API v403。Redis ACL 用户认证#10551。库存调整表单暴露给 UI 插件#10584允许对生产中库存件进行调整#10600。销售订单发运可选收货地址#10650API v415。销售订单发运勾选/取消勾选 UI#10654API v417 新增checked过滤器。订单行项目分配项目代码#10657API v418。WebAuthn 登录支持#9729。安装器与包新增 Debian 12、Ubuntu 22.04、Ubuntu 24.04 支持#10705。S3 / SFTP 存储后端#10140媒体与静态文件可托管到 S3 或 SFTP。自定义 UI Spotlight 动作 hooks#10720。SupplierPart 附件上传#10724API v421。行为调整Changed站点 URL 校验允许协议不匹配前提是设置INVENTREE_SITE_LAX_PROTOCOL为True默认值#10454。get_global_setting调用签名中enviroment_key拼写修正为environment_key#10557。七、1.0.02025-09-15首个稳定版与 PUI 全面切换1.0.0 是 InvenTree 按照语义化版本约定的第一个 stable 版本。官方表示1.0 的使用是为了表达用户早已对 InvenTree 形成的稳定性预期。本版本压倒性的主题是全面切换到新的 UI 框架与范式PUI基于模板渲染的旧 CUI 已被彻底移除这使得 InvenTree 在安全性与可移植性上获得重大改进。这一技术路线自 2022 年 3 月起启动规划对应 issue #27892023 年 8 月正式对外宣布 React 化计划。从本版本开始变更记录将保持所有稳定渠道次要版本的详细条目。值得注意的是当前仓库前端的完整实现即是这一 React 化成果的落地可参见 src/frontend/src组件、页面、表格、表单与状态管理均采用 React TypeScript 实现仓库根目录的 tasks.py 则提供了invoke系列管理命令如invoke migrate、invoke update的入口。八、版本演进主线总结与升级实践建议三大演进主线从 1.0.0 到 UnreleasedInvenTree 的版本演进可以归纳为三条主线架构统一化参数系统从 Part 专属泛化为通用Parameter模型元数据端点从逐模型收敛为单一通用端点Notes 从内联字段重构为独立的通用Note模型见 src/backend/InvenTree/common/models.py 的Note定义支持model_typemodel_id通用外键关联并通过UniqueConstraint保证每个模型实例仅有一个主笔记StockItem 移除 MPTT 树结构。安全加固报告生成的远程 URI 默认阻止SSRF 防护、API 默认节流DoS 缓解、批量操作禁止任意过滤、按权限裁剪 API 响应字段、移除remote_image远程抓图字段。前端体验升级PUI 全面取代 CUI、表格列级过滤、可保存过滤器组、预览抽屉、旋转表头、多级 BOM 视图等。外部 API 客户端升级检查清单如果你维护依赖 InvenTree API 的外部应用以下变更点需要逐一核对版本需要关注的变更迁移动作Unreleasednotes字段 →/api/note/端点改写所有笔记读写逻辑Unreleasedtags过滤器 →tag_name更新过滤参数名1.5.0StockItem MPTT 移除移除对 MPTT 结构的使用1.4.0SalesOrderStatusGroups枚举语义将 shipped 归入 active 组1.4.0API 默认节流适配 429 响应与重试策略1.3.0Part.default_supplier→SupplierPart.primary迁移字段读写1.2.0Part 专属参数端点 → 通用 Parameter 端点更新端点路径与字段名1.2.0模型专属 metadata 端点 → 通用 metadata 端点更新端点路径升级路径与运维要点跨大版本升级由于 Unreleased 分支已 squash 所有 1.0.0 之前的迁移任何旧于 1.0.0 的实例必须先升级到 1.0.0再继续升级。迁移命令新语义invoke migrate与invoke update现在只应用已有迁移不再隐式生成新迁移确需生成迁移时必须显式使用invoke migrate --detect。Python 版本要求当前源码 src/backend/InvenTree/InvenTree/version.py 定义的最低 Python 版本为(3, 12)同时 1.5.0 起不再支持 Python 3.11升级前请确认运行环境满足要求。版本信息自检运行中的实例可通过inventreeVersion()version.py、inventreeApiVersion()返回当前 API 版本version.py以及inventreeApiText()返回最近 N 个 API 版本的演进描述等方法获取版本与 API 兼容信息API 版本的完整演进记录维护在 src/backend/InvenTree/InvenTree/api_version.py当前INVENTREE_API_VERSION 545每条记录都标注了对应的功能变更与日期。通过源码验证设置项CHANGELOG 中新增的全局/用户设置项都能在源码中找到对应定义与使用点便于部署前确认取值与默认值REPORT_FETCH_URLS系统设置布尔定义于 src/backend/InvenTree/common/setting/system.py由 src/backend/InvenTree/report/fetcher.py 读取控制报告模板中的远程 URL 抓取。PURCHASEORDER_MERGE_LINE_ITEMS系统设置布尔定义于 system.py被 order/api.py 与 order/serializers.py 用作采购订单行合并的默认值。ROTATE_TABLE_HEADERS用户设置布尔定义于 src/backend/InvenTree/common/setting/user.py。INVENTREE_THROTTLE_ANON/INVENTREE_THROTTLE_USER环境变量/配置文件在 src/backend/InvenTree/InvenTree/settings.py 中读取默认分别为20/minute与60/second仅在非 DEBUG 且值非none时启用 DRF 限流类。结语通过 CHANGELOG 与源码的双向对照可以清晰看到 InvenTree 在 1.x 系列中完成的三件大事以通用模型取代专属模型的架构收敛、以默认安全策略为核心的安全加固、以 PUI 为代表的现代化前端重构。对于部署方与 API 集成方本文梳理的破坏性变更清单与升级检查表应作为每次升级前的必读项对希望深入源码的开发者文中所引用的设置定义、模型实现与测试用例文件则是继续探索的最佳起点。【免费下载链接】InvenTreeOpen Source Inventory Management System项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表