308 lines
13 KiB
XML
308 lines
13 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<odoo>
|
||
<!--
|
||
|
||
Demo 演示数据
|
||
============
|
||
安装模块时勾选「加载演示数据」即可自动创建以下种子数据:
|
||
- 学习分类树(4 个分类)
|
||
- 1 所学校(求知中学)
|
||
- 3 位老师
|
||
- 2 个班级(入门班 / 进阶班)
|
||
- 10 个学生(每班 5 人)
|
||
- 1 本教材(5 个章节)
|
||
- 2 门选修课(演示 Many2many)
|
||
- 若干学习进度记录
|
||
|
||
教学知识点:XML 数据加载、noupdate 标签、外键 ref 引用、
|
||
Many2many eval 写法 [(6, 0, [ids])]
|
||
|
||
-->
|
||
|
||
<!-- ============ 学习分类树 ============ -->
|
||
|
||
<record id="demo_category_root" model="yuthon.school.category">
|
||
<field name="name">Odoo 18 开发</field>
|
||
<field name="level">beginner</field>
|
||
</record>
|
||
|
||
<record id="demo_category_basic" model="yuthon.school.category">
|
||
<field name="name">基础入门</field>
|
||
<field name="parent_id" ref="demo_category_root"/>
|
||
<field name="level">beginner</field>
|
||
</record>
|
||
|
||
<record id="demo_category_model" model="yuthon.school.category">
|
||
<field name="name">模型开发</field>
|
||
<field name="parent_id" ref="demo_category_root"/>
|
||
<field name="level">intermediate</field>
|
||
</record>
|
||
|
||
<record id="demo_category_view" model="yuthon.school.category">
|
||
<field name="name">视图开发</field>
|
||
<field name="parent_id" ref="demo_category_root"/>
|
||
<field name="level">intermediate</field>
|
||
</record>
|
||
|
||
<!-- ============ 学校 ============ -->
|
||
|
||
<record id="demo_school" model="yuthon.school.school">
|
||
<field name="name">求知中学</field>
|
||
<field name="address">北京市海淀区中关村南大街 1 号</field>
|
||
<field name="phone">010-88888001</field>
|
||
<field name="principal">赵校长</field>
|
||
</record>
|
||
|
||
<!-- ============ 老师 ============ -->
|
||
|
||
<record id="demo_teacher_zhang" model="yuthon.school.teacher">
|
||
<field name="name">张老师</field>
|
||
<field name="school_id" ref="demo_school"/>
|
||
<field name="phone">138-0000-0001</field>
|
||
<field name="subject">Odoo 模型开发</field>
|
||
</record>
|
||
|
||
<record id="demo_teacher_li" model="yuthon.school.teacher">
|
||
<field name="name">李老师</field>
|
||
<field name="school_id" ref="demo_school"/>
|
||
<field name="phone">138-0000-0002</field>
|
||
<field name="subject">Odoo 视图开发</field>
|
||
</record>
|
||
|
||
<record id="demo_teacher_wang" model="yuthon.school.teacher">
|
||
<field name="name">王老师</field>
|
||
<field name="school_id" ref="demo_school"/>
|
||
<field name="phone">138-0000-0003</field>
|
||
<field name="subject">Odoo 部署运维</field>
|
||
</record>
|
||
|
||
<!-- ============ 班级 ============ -->
|
||
|
||
<record id="demo_class_beginner" model="yuthon.school.class">
|
||
<field name="name">Odoo 18 入门班</field>
|
||
<field name="school_id" ref="demo_school"/>
|
||
<field name="teacher_id" ref="demo_teacher_zhang"/>
|
||
<field name="grade">2026 级</field>
|
||
</record>
|
||
|
||
<record id="demo_class_advanced" model="yuthon.school.class">
|
||
<field name="name">Odoo 18 进阶班</field>
|
||
<field name="school_id" ref="demo_school"/>
|
||
<field name="teacher_id" ref="demo_teacher_li"/>
|
||
<field name="grade">2026 级</field>
|
||
</record>
|
||
|
||
<!-- ============ 学生(入门班 5 人) ============ -->
|
||
|
||
<record id="demo_student_01" model="yuthon.school.student">
|
||
<field name="name">陈小明</field>
|
||
<field name="student_no">S20260001</field>
|
||
<field name="class_id" ref="demo_class_beginner"/>
|
||
<field name="gender">male</field>
|
||
<field name="phone">139-0000-0001</field>
|
||
<field name="enrollment_date">2026-03-01</field>
|
||
</record>
|
||
|
||
<record id="demo_student_02" model="yuthon.school.student">
|
||
<field name="name">林小芳</field>
|
||
<field name="student_no">S20260002</field>
|
||
<field name="class_id" ref="demo_class_beginner"/>
|
||
<field name="gender">female</field>
|
||
<field name="phone">139-0000-0002</field>
|
||
<field name="enrollment_date">2026-03-01</field>
|
||
</record>
|
||
|
||
<record id="demo_student_03" model="yuthon.school.student">
|
||
<field name="name">黄小杰</field>
|
||
<field name="student_no">S20260003</field>
|
||
<field name="class_id" ref="demo_class_beginner"/>
|
||
<field name="gender">male</field>
|
||
<field name="phone">139-0000-0003</field>
|
||
<field name="enrollment_date">2026-03-01</field>
|
||
</record>
|
||
|
||
<record id="demo_student_04" model="yuthon.school.student">
|
||
<field name="name">刘小婷</field>
|
||
<field name="student_no">S20260004</field>
|
||
<field name="class_id" ref="demo_class_beginner"/>
|
||
<field name="gender">female</field>
|
||
<field name="phone">139-0000-0004</field>
|
||
<field name="enrollment_date">2026-03-01</field>
|
||
</record>
|
||
|
||
<record id="demo_student_05" model="yuthon.school.student">
|
||
<field name="name">周小强</field>
|
||
<field name="student_no">S20260005</field>
|
||
<field name="class_id" ref="demo_class_beginner"/>
|
||
<field name="gender">male</field>
|
||
<field name="phone">139-0000-0005</field>
|
||
<field name="enrollment_date">2026-03-01</field>
|
||
</record>
|
||
|
||
<!-- ============ 学生(进阶班 5 人) ============ -->
|
||
|
||
<record id="demo_student_06" model="yuthon.school.student">
|
||
<field name="name">吴小燕</field>
|
||
<field name="student_no">S20260006</field>
|
||
<field name="class_id" ref="demo_class_advanced"/>
|
||
<field name="gender">female</field>
|
||
<field name="phone">139-0000-0006</field>
|
||
<field name="enrollment_date">2026-03-01</field>
|
||
</record>
|
||
|
||
<record id="demo_student_07" model="yuthon.school.student">
|
||
<field name="name">郑小伟</field>
|
||
<field name="student_no">S20260007</field>
|
||
<field name="class_id" ref="demo_class_advanced"/>
|
||
<field name="gender">male</field>
|
||
<field name="phone">139-0000-0007</field>
|
||
<field name="enrollment_date">2026-03-01</field>
|
||
</record>
|
||
|
||
<record id="demo_student_08" model="yuthon.school.student">
|
||
<field name="name">孙小丽</field>
|
||
<field name="student_no">S20260008</field>
|
||
<field name="class_id" ref="demo_class_advanced"/>
|
||
<field name="gender">female</field>
|
||
<field name="phone">139-0000-0008</field>
|
||
<field name="enrollment_date">2026-03-01</field>
|
||
</record>
|
||
|
||
<record id="demo_student_09" model="yuthon.school.student">
|
||
<field name="name">胡小军</field>
|
||
<field name="student_no">S20260009</field>
|
||
<field name="class_id" ref="demo_class_advanced"/>
|
||
<field name="gender">male</field>
|
||
<field name="phone">139-0000-0009</field>
|
||
<field name="enrollment_date">2026-03-01</field>
|
||
</record>
|
||
|
||
<record id="demo_student_10" model="yuthon.school.student">
|
||
<field name="name">高小静</field>
|
||
<field name="student_no">S20260010</field>
|
||
<field name="class_id" ref="demo_class_advanced"/>
|
||
<field name="gender">female</field>
|
||
<field name="phone">139-0000-0010</field>
|
||
<field name="enrollment_date">2026-03-01</field>
|
||
</record>
|
||
|
||
<!-- ============ 教材 + 章节 ============ -->
|
||
|
||
<record id="demo_textbook" model="yuthon.school.textbook">
|
||
<field name="name">Odoo 18 框架开发实战</field>
|
||
<field name="category_id" ref="demo_category_root"/>
|
||
<field name="difficulty">beginner</field>
|
||
<field name="state">published</field>
|
||
<field name="description">从零开始学习 Odoo 18 框架开发,涵盖模块结构、模型定义、视图架构、权限机制等核心知识点。</field>
|
||
</record>
|
||
|
||
<record id="demo_chapter_01" model="yuthon.school.chapter">
|
||
<field name="name">第一章 模块结构与清单文件</field>
|
||
<field name="textbook_id" ref="demo_textbook"/>
|
||
<field name="sequence">10</field>
|
||
<field name="summary">了解 Odoo 模块的目录结构和 __manifest__.py 清单文件</field>
|
||
<field name="key_points">__manifest__.py 字段、data 文件加载顺序、addons_path 配置</field>
|
||
<field name="hours">2.0</field>
|
||
</record>
|
||
|
||
<record id="demo_chapter_02" model="yuthon.school.chapter">
|
||
<field name="name">第二章 模型定义与字段类型</field>
|
||
<field name="textbook_id" ref="demo_textbook"/>
|
||
<field name="sequence">20</field>
|
||
<field name="summary">掌握 Odoo 模型定义、字段类型和关系字段</field>
|
||
<field name="key_points">Char/Integer/Float/Selection、Many2one/One2many/Many2many、compute/store</field>
|
||
<field name="hours">4.0</field>
|
||
</record>
|
||
|
||
<record id="demo_chapter_03" model="yuthon.school.chapter">
|
||
<field name="name">第三章 视图架构</field>
|
||
<field name="textbook_id" ref="demo_textbook"/>
|
||
<field name="sequence">30</field>
|
||
<field name="summary">学习 list/form/search/kanban 四种核心视图</field>
|
||
<field name="key_points">list 视图、form 视图、search 视图、kanban 看板视图</field>
|
||
<field name="hours">3.0</field>
|
||
</record>
|
||
|
||
<record id="demo_chapter_04" model="yuthon.school.chapter">
|
||
<field name="name">第四章 权限与安全机制</field>
|
||
<field name="textbook_id" ref="demo_textbook"/>
|
||
<field name="sequence">40</field>
|
||
<field name="summary">理解 ir.model.access.csv 和 ir.rule 记录规则</field>
|
||
<field name="key_points">模型访问权限、记录规则、用户组</field>
|
||
<field name="hours">2.5</field>
|
||
</record>
|
||
|
||
<record id="demo_chapter_05" model="yuthon.school.chapter">
|
||
<field name="name">第五章 控制器与路由</field>
|
||
<field name="textbook_id" ref="demo_textbook"/>
|
||
<field name="sequence">50</field>
|
||
<field name="summary">学习 HTTP 控制器和 URL 路由</field>
|
||
<field name="key_points">Controller、@http.route、请求处理、模板渲染</field>
|
||
<field name="hours">3.0</field>
|
||
</record>
|
||
|
||
<!-- ============ 选修课(Many2many 演示) ============ -->
|
||
|
||
<record id="demo_elective_owl" model="yuthon.school.elective">
|
||
<field name="name">OWL 前端框架入门</field>
|
||
<field name="teacher_id" ref="demo_teacher_li"/>
|
||
<field name="description">学习 Odoo Web Library (OWL) 框架基础,理解组件化前端开发。</field>
|
||
<field name="student_ids" eval="[(6, 0, [ref('demo_student_01'), ref('demo_student_02'), ref('demo_student_03')])]"/>
|
||
</record>
|
||
|
||
<record id="demo_elective_workflow" model="yuthon.school.elective">
|
||
<field name="name">Odoo 工作流开发</field>
|
||
<field name="teacher_id" ref="demo_teacher_zhang"/>
|
||
<field name="description">深入学习 Odoo 工作流机制,掌握状态机和业务流程设计。</field>
|
||
<field name="student_ids" eval="[(6, 0, [ref('demo_student_06'), ref('demo_student_07'), ref('demo_student_08')])]"/>
|
||
</record>
|
||
|
||
<!-- ============ 学习进度记录 ============ -->
|
||
|
||
<record id="demo_progress_01" model="yuthon.school.progress">
|
||
<field name="student_id" ref="demo_student_01"/>
|
||
<field name="textbook_id" ref="demo_textbook"/>
|
||
<field name="chapter_id" ref="demo_chapter_01"/>
|
||
<field name="progress">100</field>
|
||
<field name="completed">True</field>
|
||
<field name="last_study_date">2026-07-20 10:00:00</field>
|
||
</record>
|
||
|
||
<record id="demo_progress_02" model="yuthon.school.progress">
|
||
<field name="student_id" ref="demo_student_01"/>
|
||
<field name="textbook_id" ref="demo_textbook"/>
|
||
<field name="chapter_id" ref="demo_chapter_02"/>
|
||
<field name="progress">65</field>
|
||
<field name="completed">False</field>
|
||
<field name="last_study_date">2026-07-25 14:00:00</field>
|
||
</record>
|
||
|
||
<record id="demo_progress_03" model="yuthon.school.progress">
|
||
<field name="student_id" ref="demo_student_02"/>
|
||
<field name="textbook_id" ref="demo_textbook"/>
|
||
<field name="chapter_id" ref="demo_chapter_01"/>
|
||
<field name="progress">100</field>
|
||
<field name="completed">True</field>
|
||
<field name="last_study_date">2026-07-22 09:30:00</field>
|
||
</record>
|
||
|
||
<record id="demo_progress_04" model="yuthon.school.progress">
|
||
<field name="student_id" ref="demo_student_06"/>
|
||
<field name="textbook_id" ref="demo_textbook"/>
|
||
<field name="chapter_id" ref="demo_chapter_03"/>
|
||
<field name="progress">40</field>
|
||
<field name="completed">False</field>
|
||
<field name="last_study_date">2026-07-26 16:00:00</field>
|
||
</record>
|
||
|
||
<record id="demo_progress_05" model="yuthon.school.progress">
|
||
<field name="student_id" ref="demo_student_07"/>
|
||
<field name="textbook_id" ref="demo_textbook"/>
|
||
<field name="chapter_id" ref="demo_chapter_01"/>
|
||
<field name="progress">0</field>
|
||
<field name="completed">False</field>
|
||
<field name="last_study_date">2026-07-28 08:00:00</field>
|
||
</record>
|
||
|
||
</odoo>
|