📚 模型概览

Wiki模型是知识库系统的核心,用于构建结构化的百科词条,支持丰富的关联关系、分类体系和内容管理功能。适用于知识库、产品库、人物库、术语解释等场景。

✨ 核心功能特性

1. 结构化知识管理

  • 主副标题:支持主标题、副标题、别名
  • 分层内容:基本资料+详细内容双字段设计
  • 完整分类:严格的分类体系管理
  • 关联网络:多层级关联关系构建

2. 智能关联系统

  • 自关联:百科词条间的相互关联
  • 标签关联:手动标签+自动标签双模式
  • 动态匹配:标题关键词自动关联标签
  • 相关文章:可关联相关文章内容

3. 富文本内容编辑

  • 基本资料:CKEditor5编辑,用于摘要或基本信息
  • 详细内容:完整富文本编辑器
  • 多配置支持:支持不同编辑配置
  • 媒体嵌入:支持图片、视频、表格等

4. 完整的内容工作流

  • 7种状态:完整的审核发布流程
  • 权限控制:多级访问权限管理
  • 版本控制:通过状态实现版本管理
  • 归档机制:历史内容归档

5. 强大的关联网络

 
# 支持多种关联类型
1. 自关联(about):百科之间的相互关联
2. 标签关联(relatedtags):手动选择关键词
3. 动态标签(filteredtags):自动匹配标签
4. 分类关联(category):严格的分类体系
 
 

6. SEO与URL优化

  • 完整SEO:继承SEOMixin所有优化功能
  • URL友好:自动生成唯一slug
  • 规范链接:防止重复内容
  • 社交分享:Open Graph优化

7. 权限与可见性

  • 状态控制:7种状态管理
  • 用户组控制:限制特定用户组访问
  • 评论管理:控制评论权限
  • 员工可见:内部使用内容标记

🎯 后台使用指南

1. 创建新百科词条

步骤1:基础信息填写
 
标题:[必填] 百科词条主标题
副标题:[选填] 补充说明或副标题
别名:[选填] 其他称呼、外文名等
内容编辑:[自动] 当前操作用户
 
 
步骤2:内容编辑
 
基本资料:[选填] 使用CKEditor5编辑,适合摘要、基本信息
内容:[选填] 完整详细描述,使用富文本编辑器
 
 
步骤3:分类与关联
 
所属分类:[必选] 选择百科分类(必须为wiki类型)
相关百科:[可选] 关联其他相关百科词条
关联标签:[可选] 手动选择相关关键词标签
动态标签:[自动] 系统自动根据标题匹配标签
 
 
步骤4:媒体与模板
 
缩略图:[可选] 上传封面图片
个性模板:[可选] 选择自定义展示模板
推荐:[可选] 设为精选内容
 
 
步骤5:SEO优化
 
SEO标题:[自动] 留空使用词条标题
SEO描述:[自动] 留空自动从内容提取
SEO关键词:[选填] 用英文逗号分隔
URL标识:[自动] 自动生成唯一slug
Open Graph:[自动] 社交媒体分享优化
 
 
步骤6:权限设置
 
审核状态:[必选] 选择内容状态
仅工作人员可见:[可选] 内部使用内容
允许访问的用户组:[可选] 限制用户组
允许评论:[可选] 控制评论权限
 
 
步骤7:保存发布
 
保存 → 系统自动处理SEO、URL、标签关联 → 根据状态进入相应流程
 
 

2. 关联关系管理

自关联(about字段)的使用
  • 用途:建立百科词条间的关联网络
  • 示例
     
    词条"Python"可关联:
    - 编程语言
    - 解释型语言
    - 高级语言
    - 相关技术:Django、Flask
     
     
标签关联策略
 
手动标签:编辑手动选择的精准关键词
自动标签:系统根据标题自动匹配
使用场景:
- 精准控制:使用手动标签
- 批量处理:使用自动标签
- 结合使用:两者结合获得最佳效果
 
 

3. 工作流程

 
新建词条 → 已入库
    ↓
编辑内容 → 草稿状态
    ↓
提交审核 → 已提交 → 审核中
    ↓                        ↓
直接发布 → 已发布        审核通过 → 已发布
                          ↓
                      审核驳回 → 修改后重新提交
 
 
状态说明
  • 已入库(0):新创建词条默认状态
  • 草稿(1):编辑中,未提交审核
  • 已提交(2):已提交等待审核
  • 审核中(3):正在审核
  • 已通过(4):审核通过待发布
  • 已发布(99):已正式发布
  • 已驳回(5):审核未通过
  • 已归档(6):历史归档

4. URL访问规则

支持5种URL风格:
  • 模型路径/wiki/123.html
  • 单级Slug/knowledge/123.html
  • 多级Slug/tech/programming/123.html
  • 随机字符/jklfdsa/1.html
  • 自定义路径/mywiki/mypage/1.shtml
实际生成路径:/wiki/{标识}{后缀}
  • 标识:ID或哈希值
  • 后缀:.html、.shtml等

📊 字段说明速查

字段分组
字段名
说明
必填
默认值
基础信息
title
词条标题
-
 
subtitle
副标题
 
alias
别名
 
pytitle
标题拼音
自动
内容编辑
basic
基本资料
 
content
详细内容
 
thumbimage
缩略图
 
template
个性模板
分类标签
category
所属分类
-
 
about
相关百科
 
relatedtags
关联标签
 
filteredtags
动态标签
自动
权限控制
status
审核状态
99(已发布)
 
staffonly
仅员工可见
False
 
allowedgroups
允许用户组
 
allowcomment
允许评论
True
统计导航
hits
点击量
自动
0
 
istop
是否推荐
False
 
previousobj
上一篇
null
 
nextobj
下一篇
null
 
createtime
创建时间
自动
当前时间
 
updatetime
更新时间
自动
当前时间
关联信息
editor
内容编辑
当前用户
继承字段
所有SEOMixin字段
SEO优化
自动/手动
-

🔗 关联网络详解

1. 自关联(about字段)

关联类型
  • 相关概念:解释相关术语
  • 上级分类:所属大类
  • 下级分类:包含的子类
  • 应用实例:实际应用案例
  • 历史发展:相关历史背景
管理技巧
 
# 获取相关百科的优化查询
def getrelatedarticles(self):
    return self.about.selectrelated('category').only(
        'title', 'categoryname', 'createtime'
    )

使用示例

relatedwikis = wiki.getrelatedarticles() for related in relatedwikis: print(f"{related.title} - {related.category.name}")

 
 

2. 标签系统

双标签系统优势
 
手动标签(related_tags):
√ 精准控制
√ 编辑选择
√ 稳定性高
× 工作量大

自动标签(filteredtags): √ 自动处理 √ 覆盖全面 √ 效率高 × 准确率略低

 
 
标签匹配逻辑
  1. 保存时检查标题变化
  2. 提取标题关键词
  3. 与标签库模糊匹配
  4. 建立动态关联关系
  5. 更新缓存时间戳

3. 分类体系

分类限制
 
# 分类必须为wiki类型
limitchoicesto={'contenttype__model': 'wiki'}

使用场景

  1. 技术百科:编程语言、框架、工具
  2. 产品百科:产品功能、参数、使用
  3. 人物百科:人物介绍、生平、成就
  4. 术语百科:专业术语解释
  5. 事件百科:历史事件、新闻事件
 
 

🎨 模板使用技巧

1. 基础信息展示

 
{# 标题与别名 #}
<h1>{{ wiki.title }}</h1>
{% if wiki.subtitle %}
<h2 class="subtitle">{{ wiki.subtitle }}</h2>
{% endif %}
{% if wiki.alias %}
<p class="alias">别名:{{ wiki.alias }}</p>
{% endif %}


{# 基本资料 #} {% if wiki.basic %} <div class="basic-info"> {{ wiki.basic|safe }} </div> {% endif %}

{# 详细内容 #} <div class="content"> {{ wiki.content|safe }} </div>

 
 

2. 关联内容展示

 
{# 相关百科 #}
{% if wiki.about.exists %}
  <div class="related-wikis">
    <h3>相关百科</h3>
    <ul>
      {% for related in wiki.about.all %}
        <li>
          <a href="{{ related.getabsoluteurl }}">{{ related.title }}</a>
          {% if related.subtitle %}
            <span class="sub">- {{ related.subtitle }}</span>
          {% endif %}
        </li>
      {% endfor %}
    </ul>
  </div>
{% endif %}

{# 标签展示 #} {% if wiki.relatedtags.exists %} <div class="tags"> {% for tag in wiki.relatedtags.all %} <a href="{{ tag.getabsoluteurl }}" class="tag">{{ tag.title }}</a> {% endfor %} </div> {% endif %}

 
 

3. 导航与分页

 
{# 上一篇/下一篇 #}
<div class="wiki-navigation">
  {% if wiki.previousobj %}
    <a href="{{ wiki.previousobj.getabsoluteurl }}" class="prev">
      ← {{ wiki.previous_obj.title }}
    </a>
  {% endif %}

{% if wiki.nextobj %} <a href="{{ wiki.nextobj.getabsoluteurl }}" class="next"> {{ wiki.nextobj.title }} → </a> {% endif %} </div>

 
 

4. SEO标签生成

 
{# 自动生成meta标签 #}
{% with meta=wiki.getmeta_tags %}
  <title>{{ meta.title }}</title>
  <meta name="description" content="{{ meta.description }}">
  <meta name="keywords" content="{{ meta.keywords }}">

{# Open Graph #} <meta property="og:title" content="{{ meta.og.title }}"> <meta property="og:description" content="{{ meta.og.description }}"> <meta property="og:url" content="{{ meta.og.url }}">

{# Twitter Cards #} <meta name="twitter:card" content="{{ meta.twitter.card }}"> <meta name="twitter:title" content="{{ meta.twitter.title }}"> {% endwith %}

 
 

🔧 高级功能配置

1. 性能优化索引

已配置索引
 
# 12个数据库索引优化
1. 分类+状态+时间组合查询
2. 状态+时间降序查询
3. 单独时间降序索引
4. 点击量+状态组合索引
5. 标题模糊查询索引
6. 复合索引优化
 
 
查询优化
 
# 使用预取相关对象
wiki = Wiki.objects.selectrelated('category').prefetchrelated('about').get(pk=1)

使用优化方法获取相关文章

related = wiki.getrelatedarticles() # 使用only限制字段

 
 

2. 安全删除功能

关联安全删除
 
def deletewithrelations(self):
    # 清理关联的Previous和Next字段
    Wiki.objects.filter(Previous=self).update(Previous=None)
    Wiki.objects.filter(Next=self).update(Next=None)

# 执行删除
self.delete()

使用示例

wiki.deletewithrelations()

 
 

3. URL生成策略

配置项说明
 
url_front: 路径前缀风格
  - model: 模型路径
  - slug: 单级分类
  - moreslug: 多级分类
  - random: 随机字符
  - custom: 自定义路径

url_mid: 内容标识 - id: 使用数字ID - hash: 使用哈希值

url_suffix: URL后缀 - .html - .shtml - 其他自定义后缀

 
 

💡 最佳实践建议

1. 内容结构规划

标题策略
  • 主标题:简洁明确
  • 副标题:补充说明
  • 别名:常用称呼、外文名
  • 示例:
     
    主标题:Python
    副标题:高级编程语言
    别名:Python语言、CPython
     
     
内容分层
 
基本资料(basic字段):
√ 摘要信息
√ 关键数据
√ 快速了解
√ 适合列表页展示

详细内容(content字段): √ 完整介绍 √ 深度分析 √ 示例代码 √ 适合详情页展示

 
 

2. 关联关系管理

自关联原则
  • 强相关:直接相关概念
  • 层级关系:上下级分类
  • 应用关联:实际应用场景
  • 历史关联:发展历程
  • 避免循环:防止循环关联
标签使用
  • 核心标签:3-5个核心关键词
  • 扩展标签:相关领域标签
  • 避免冗余:合并相似标签
  • 定期维护:清理无用标签

3. 分类体系建设

分类设计
 
层级清晰:大类 → 中类 → 小类
命名规范:使用标准术语
内容聚焦:每个分类主题明确
避免交叉:减少分类重叠
 
 
分类示例
 
技术类:
├── 编程语言
│   ├── Python
│   ├── JavaScript
│   └── Java
├── 开发框架
│   ├── Django
│   ├── React
│   └── Spring
└── 工具软件
    ├── Git
    ├── Docker
    └── VS Code
 
 

4. SEO优化策略

标题优化
  • 包含核心关键词
  • 长度控制在60字符内
  • 主标题+副标题组合
描述优化
  • 摘要基本资料内容
  • 包含核心关键词
  • 长度150-300字符
  • 吸引用户点击
关键词策略
  • 核心词+长尾词
  • 用英文逗号分隔
  • 避免堆砌关键词
  • 定期更新优化

5. 权限管理

状态管理流程
 
编辑人员:创建 → 草稿 → 提交
审核人员:审核 → 通过/驳回
发布人员:发布 → 归档
 
 
用户组权限
 
公开内容:所有用户可访问
内部内容:仅员工可访问
特定群体:指定用户组访问
付费内容:付费用户组访问
 
 

6. 性能优化

数据库优化
  • 合理使用索引
  • 避免N+1查询
  • 使用selectrelated和prefetchrelated
  • 定期清理过期数据
缓存策略
  • 热门词条缓存
  • 关联关系缓存
  • 列表页分页缓存
  • 标签匹配结果缓存

7. 维护与备份

日常维护
  • 定期检查死链
  • 更新关联关系
  • 清理重复内容
  • 优化标签系统
数据备份
  • 定期全量备份
  • 增量备份关联关系
  • 备份图片媒体文件
  • 测试恢复流程
这个百科模型提供了从内容创建、关联管理、权限控制到SEO优化的完整解决方案,特别适合知识库、产品库、企业wiki、在线百科等需要结构化知识管理的场景。