文档管理核心
文档管理核心
相关源文件
本章引用的主要源码文件:
mayan/apps/converter/templatetags/converter_tags.pymayan/apps/documents/apps.pymayan/apps/documents/icons.pymayan/apps/documents/links/document_version_links.pymayan/apps/documents/managers.pymayan/apps/documents/migrations/0078_alter_documenttype_label.pymayan/apps/documents/models/document_file_models.pymayan/apps/documents/models/document_file_page_models.pymayan/apps/documents/models/document_models.pymayan/apps/documents/models/document_type_models.pymayan/apps/documents/models/document_version_models.pymayan/apps/documents/models/document_version_page_models.pymayan/apps/documents/permissions.pymayan/apps/documents/tasks.pymayan/apps/documents/templates/documents/errors/document_file_page_transformation_error.htmlmayan/apps/documents/templates/documents/errors/document_version_page_transformation_error.htmlmayan/apps/documents/templates/documents/forms/widgets/page_carousel.htmlmayan/apps/documents/templates/documents/forms/widgets/page_image.htmlmayan/apps/documents/templates/documents/widgets/thumbnail.htmlmayan/apps/documents/tests/test_document_file_page_views.pymayan/apps/documents/tests/test_document_type_api.pymayan/apps/documents/urls.pymayan/apps/documents/views/document_file_page_views.pymayan/apps/documents/views/document_type_views.pymayan/apps/documents/views/document_version_page_views.pymayan/apps/documents/views/document_version_views.pymayan/apps/documents/views/document_views.py
本文档深入剖析了构成 Mayan EDMS 基础的文档管理核心模型:Document(文档)、DocumentType(文档类型)、DocumentFile(文档文件)、DocumentVersion(文档版本)及其关联的页面模型。这些模型负责处理文档存储、版本管理和组织功能等核心需求。关于文档入库和上传流程的信息,请参见文档入库。关于工作流和状态管理,请参见工作流管理。
核心模型架构
文档管理系统围绕一个分层模型结构构建,该结构将文档元数据与文件存储分离,并提供灵活的版本管理能力。
来源: mayan/apps/documents/models/document_models.py:41-337, mayan/apps/documents/models/document_type_models.py:34-239, mayan/apps/documents/models/document_file_models.py:51-507, mayan/apps/documents/models/document_version_models.py:45-389
文档生命周期流程
Mayan EDMS 中的文档遵循一个从创建到处理再到组织的特定生命周期:
来源: mayan/apps/documents/models/document_type_models.py:138-177, mayan/apps/documents/models/document_models.py:189-251, mayan/apps/documents/models/document_file_models.py:428-505
文档类型系统
DocumentType 模型作为主要的分类机制,通过可配置的策略和文件名生成来控制文档行为。
关键组件
| 组件 | 用途 | 代码参考 |
|---|---|---|
label | 人类可读的类型标识符 | document_type_models.py:39-42 |
filename_generator_backend | 控制文件存储路径生成 | document_type_models.py:64-69 |
trash_time_period/unit | 自动回收站策略 | document_type_models.py:43-52 |
delete_time_period/unit | 永久删除策略 | document_type_models.py:53-63 |
文档创建流程
DocumentType.new_document() 方法负责原子化地创建文档及其初始文件:
来源: mayan/apps/documents/models/document_type_models.py:138-177, mayan/apps/documents/models/document_models.py:189-251
文件与版本管理
DocumentFile 模型
DocumentFile 模型表示存储在系统中的物理文件,并带有全面的元数据跟踪:
| 字段 | 用途 | 自动生成 |
|---|---|---|
checksum | 用于完整性校验的 SHA256 哈希 | 是 |
mimetype | MIME 类型检测 | 是 |
encoding | 字符编码 | 是 |
size | 文件大小(字节) | 是 |
filename | 原始文件名 | 否 |
comment | 用户描述 | 否 |
关键方法:
checksum_update():使用可配置的块大小重新计算 SHA256 哈希mimetype_update():使用MIMETypeBackend进行格式检测page_count_update():通过转换器后端提取页数open(raw=False):返回文件描述符,并带有可选的预处理钩子
来源: mayan/apps/documents/models/document_file_models.py:186-214, mayan/apps/documents/models/document_file_models.py:344-362, mayan/apps/documents/models/document_file_models.py:389-414
DocumentVersion 模型
文档版本通过灵活的页面映射提供对文档文件的逻辑视图:
- 活跃版本:每个文档只能有一个活跃版本(
active=True) - 页面映射:版本通过
DocumentVersionPage对象映射到文件页面 - 内容视图:版本可以重新排列、子集化或合并来自多个文件的页面
关键方法:
active_set():原子化地将此版本设置为活跃版本pages_reset():创建与最新文件页面的 1:1 映射pages_append_all():映射所有文档文件中的所有页面pages_remap():通过annotated_content_object_list进行自定义页面排列
来源: mayan/apps/documents/models/document_version_models.py:95-102, mayan/apps/documents/models/document_version_models.py:340-358, mayan/apps/documents/models/document_version_models.py:291-309, mayan/apps/documents/models/document_version_models.py:315-338
页面管理系统
页面系统采用两层架构,将物理文件页面与逻辑版本页面分离:
DocumentFilePage
表示从文档文件中提取的实际页面:
- 自动生成:在
page_count_update()期间创建 - 不可变结构:页数反映源文件结构
- 图片生成:通过转换器后端处理页面到图片的转换
- 缓存管理:维护页面图片缓存分区
来源: mayan/apps/documents/models/document_file_page_models.py:28-267
DocumentVersionPage
通过通用外键提供对文件页面的灵活映射:
- 通用内容:通过
content_type/object_id指向任意内容对象 - 页面排序:
page_number字段控制显示顺序 - 转换支持:与源页面独立的转换管线
- 导出能力:可以将版本布局导出为 PDF
关键特性:
content_object:指向源页面的通用外键(通常为DocumentFilePage)generate_image():应用版本特定的转换export():将页面渲染为 PDF 格式以供下载
来源: mayan/apps/documents/models/document_version_page_models.py:39-267
核心模型管理器
文档系统为不同的访问模式提供了专门的管理器:
| 管理器 | 模型 | 用途 |
|---|---|---|
Document.valid | ValidDocumentManager | 非回收站中的文档 |
Document.trash | TrashCanManager | 仅回收站中的文档 |
DocumentFile.valid | ValidDocumentFileManager | 非回收站文档的文件 |
DocumentVersion.valid | ValidDocumentVersionManager | 非回收站文档的版本 |
来源: mayan/apps/documents/managers.py:189-226, mayan/apps/documents/models/document_models.py:106-108
事件系统集成
所有核心模型都与事件系统集成,用于审计追踪和自动化触发:
| 模型 | 关键事件 | 触发点 |
|---|---|---|
Document | document_created, document_edited, document_trashed | 保存、删除操作 |
DocumentFile | document_file_created, document_file_deleted | 文件上传、删除 |
DocumentVersion | document_version_created, document_version_edited | 版本操作 |
来源: mayan/apps/documents/models/document_models.py:292-317, mayan/apps/documents/models/document_file_models.py:215-236, mayan/apps/documents/models/document_version_models.py:360-378