InvenTree Stocktake Exporter 插件指南:为零件盘点数据定制导出格式

发布时间:2026/9/17 1:44:43
InvenTree Stocktake Exporter 插件指南:为零件盘点数据定制导出格式 InvenTree Stocktake Exporter 插件指南为零件盘点数据定制导出格式【免费下载链接】InvenTreeOpen Source Inventory Management System项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree本文聚焦 InvenTree 内置的Stocktake Exporter盘点导出器插件讲解它如何基于DataExportMixin为零件Part数据提供一套专门的库存盘点导出格式覆盖激活方式、导出选项、列结构、底层数据处理逻辑与单元测试验证。读完本文你将掌握该插件的完整配置与使用方式并能结合源码理解其导出的数值口径外部库存、变体库存、零库存过滤与盘点价值计算。插件定位面向盘点的定制导出InvenTree 的通用导出流程由 InvenTree API 提供默认行为是把接口返回的数据原样序列化为表格文件。而 Stocktake Exporter 插件文档 介绍的PartStocktakeExporter则是对该流程的定制它只针对Part零件数据导出一份当前库存水平清单用于盘点stocktake场景——例如定期核对各零件在库数量、计算在库金额。从源码看该插件类定义于 stocktake_exporter.pyclass PartStocktakeExporter(DataExportMixin, InvenTreePlugin): NAME Part Stocktake Exporter SLUG inventree-stocktake-exporter TITLE _(Part Stocktake Exporter) DESCRIPTION _(Exporter for part stocktake data) VERSION 1.1.1 AUTHOR _(InvenTree contributors)它与通用导出器 InvenTreeExporter 的显著区别在于后者supports_export对所有模型返回True支持全部数据集的通用导出而盘点导出器只在导出目标为零件数据时可用def supports_export(self, model_class, userNone, serializer_classNone, view_classNone, *args, **kwargs) - bool: Supported if the base model is Part. return model_class Part and serializer_class PartSerializer也就是说只有当导出数据集底层模型为Part且序列化器为PartSerializer时用户才能在导出对话框中选中该插件详见 DataExportMixin.supports_export。激活方式可选的插件开关该插件属于 InvenTree 内置的可选optional插件默认不生效需要在 InvenTree 管理界面 / 插件设置页面中将其启用才能出现在导出对话框中。相关文档原文见 stocktake_exporter.md 的 Activation 一节单元测试 test_exporter.py 中也演示了通过插件注册表启用的方式from plugin.registry import registry slug inventree-stocktake-exporter registry.set_plugin_state(slug, True)插件本身的标识为SLUG inventree-stocktake-exporter可作为 API 导出的export_plugin参数值直接使用。说明该插件没有可配置的设置项Plugin Settings 为空所有行为均由导出时刻的选项控制。导出选项导出对话框中的可调开关在零件数据的导出对话框中选中Part Stocktake Exporter插件后会出现一组额外的导出选项。选项由插件内的PartStocktakeExportOptionsSerializerDRF Serializer定义选项字段名默认值说明export_pricing_dataTrue是否在导出中包含定价数据开启后额外增加在库金额相关列Minimum/Maximum 单位成本与总成本export_include_external_itemsFalse是否包含外部仓库external warehouse的库存开启后增加External Stock列并将外部数量计入总库存与估值export_include_variant_itemsFalse是否包含变体variant零件库存开启后增加Variant Stock列并将变体数量计入总库存与估值export_exclude_zero_stock_entriesFalse是否在导出数据中排除零库存零件False时零库存零件仍会输出数量记为 0前三个选项与文档中的 Export Options 表格 一一对应而第四个选项export_exclude_zero_stock_entries是源码中额外提供的过滤能力文档未列出但源码实现中存在在 API 导出时可通过export_exclude_zero_stock_entriesTrue传入。这些选项通过ExportOptionsSerializer属性挂接在插件类上机制见 DataExportMixin 文档 的 Custom Export Options 一节插件定义一个自定义序列化器即可在导出时刻向用户提供控制开关。导出列结构Part 字段的精简子集盘点导出并不导出PartSerializer的全部字段而是由 update_headers 挑选一组与库存/订单/成本相关的核心列分组列基础信息pk、name、IPN、active、component、assembly、description、category订单占用allocated_to_build_orders、allocated_to_sales_orders、required_for_build_orders、required_for_sales_orders在库与在途ordering在途采购、building在制、scheduled_to_build计划投产、stock_item_count库存项数、total_in_stock总在库可选范围external_stock仅开启外部库存时、variant_stock仅开启变体库存时定价可选pricing_minMinimum Unit Cost、pricing_maxMaximum Unit Cost、pricing_min_totalMinimum Total Cost、pricing_max_totalMaximum Total Cost其中external_stock与variant_stock两列会根据导出选项动态增删if not include_external_items: base_headers.remove(external_stock) if not include_variant_items: base_headers.remove(variant_stock)可见默认两个选项均为False导出的是一份不掺入外部仓库与变体库存的本库盘点口径清单。数据口径total_in_stock 的归一化与估值计算导出的数量口径在 export_data 中最终确定逻辑为先调用super().export_data(...)即 DataExportMixin.export_data按EXPORT_CHUNK_SIZE 250行分批序列化拿到原始行数据读取total_in_stock若未开启外部库存则减去external_stock若未开启变体库存则减去variant_stock计算结果若为负数则钳制为 0并将整行丢弃当且仅当开启了export_exclude_zero_stock_entries将修正后的数量写回total_in_stock若开启了定价数据则以「单位成本 × 数量」计算pricing_min_total/pricing_max_total并通过normalize(..., rounding10)做金额归一化。也就是说Total Stock、Minimum/Maximum Total Cost这几列的含义随选项变化默认口径只统计本仓库非外部、非变体的在库数量与在库金额开启相关选项后外部仓库与变体零件的数量/金额才会被计入。文件名与查询集优化文件名覆盖了默认的InvenTree_{model}_{date}.{format}命名固定为InvenTree_Stocktake_{date}.{format}日期取自current_date()便于盘点导出文件按日期归档与识别def generate_filename(self, model_class, export_format: str) - str: date current_date().isoformat() return fInvenTree_Stocktake_{date}.{export_format}查询集优化通过 prefetch_queryset 对stock_items做预取prefetch_related减少导出大量零件时对库存子项的 N1 查询。单元测试验证仓库内置了针对该插件的接口级测试 test_exporter.py可帮助验证上述行为默认参数导出必需列含Name、IPN、Total Stock、Minimum Unit Cost、Maximum Total Cost排除External Stock与Variant Stock同时开启外部与变体库存必需列额外包含On Order、External Stock、Variant Stock关闭定价数据Minimum Unit Cost、Maximum Total Cost、Variant Stock、External Stock均不出现。测试通过registry.set_plugin_state(slug, True)启用插件后以 CSV 格式调用零件列表接口api-part-list并把export_plugininventree-stocktake-exporter与各选项作为导出参数传入最后校验导出文件的列集合。使用小结Stocktake Exporter 适合需要周期性导出零件库存快照含数量与估值的盘点场景。在界面中只需在零件数据导出对话框选择Part Stocktake Exporter并按需勾选定价、外部库存、变体库存选项在 API 侧则可直接通过零件列表接口搭配export_plugin与上述选项参数实现自动化导出。结合源码可知其核心价值在于把通用表格导出收窄为盘点口径导出按选项剔除外部/变体库存、钳制零库存、补充成本估值列并输出固定命名的归档文件。【免费下载链接】InvenTreeOpen Source Inventory Management System项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询