511 lines
23 KiB
XML
511 lines
23 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>
|
||
|
||
<!-- ============ 第二本教材 + 章节 ============ -->
|
||
|
||
<record id="demo_textbook_owl" model="yuthon.school.textbook">
|
||
<field name="name">Odoo 18 前端 OWL 实战</field>
|
||
<field name="category_id" ref="demo_category_view"/>
|
||
<field name="difficulty">intermediate</field>
|
||
<field name="state">published</field>
|
||
<field name="description">面向前端开发者的 OWL 组件化开发教程,覆盖组件、事件、状态与渲染。</field>
|
||
</record>
|
||
|
||
<record id="demo_chapter_owl_01" model="yuthon.school.chapter">
|
||
<field name="name">OWL 组件基础</field>
|
||
<field name="textbook_id" ref="demo_textbook_owl"/>
|
||
<field name="sequence">10</field>
|
||
<field name="hours">2.5</field>
|
||
<field name="summary">组件定义、props、状态</field>
|
||
<field name="key_points">Component、useState、props</field>
|
||
</record>
|
||
|
||
<record id="demo_chapter_owl_02" model="yuthon.school.chapter">
|
||
<field name="name">事件与渲染</field>
|
||
<field name="textbook_id" ref="demo_textbook_owl"/>
|
||
<field name="sequence">20</field>
|
||
<field name="hours">3.0</field>
|
||
<field name="summary">事件绑定、条件渲染、列表渲染</field>
|
||
<field name="key_points">t-on、t-if、t-foreach</field>
|
||
</record>
|
||
|
||
<!-- ============ 教学视频(占位文件,仅用于演示视频管理功能) ============ -->
|
||
|
||
<record id="demo_video_01" model="yuthon.school.video">
|
||
<field name="name">模块结构详解</field>
|
||
<field name="chapter_id" ref="demo_chapter_01"/>
|
||
<field name="category_id" ref="demo_category_basic"/>
|
||
<field name="duration">12:30</field>
|
||
<field name="difficulty">beginner</field>
|
||
<field name="video_filename">demo_lesson_01.mp4</field>
|
||
<field name="video_file" type="base64">AAAA</field>
|
||
<field name="description">讲解 Odoo 模块的目录结构与清单文件。</field>
|
||
<field name="key_points">__manifest__.py、data 加载顺序</field>
|
||
</record>
|
||
|
||
<record id="demo_video_02" model="yuthon.school.video">
|
||
<field name="name">模型与字段类型</field>
|
||
<field name="chapter_id" ref="demo_chapter_02"/>
|
||
<field name="category_id" ref="demo_category_model"/>
|
||
<field name="duration">18:05</field>
|
||
<field name="difficulty">intermediate</field>
|
||
<field name="video_filename">demo_lesson_02.mp4</field>
|
||
<field name="video_file" type="base64">AAAA</field>
|
||
<field name="description">Char/Integer/Selection 与关系字段。</field>
|
||
</record>
|
||
|
||
<record id="demo_video_03" model="yuthon.school.video">
|
||
<field name="name">OWL 组件基础</field>
|
||
<field name="chapter_id" ref="demo_chapter_owl_01"/>
|
||
<field name="category_id" ref="demo_category_view"/>
|
||
<field name="duration">15:40</field>
|
||
<field name="difficulty">intermediate</field>
|
||
<field name="video_filename">demo_lesson_03.mp4</field>
|
||
<field name="video_file" type="base64">AAAA</field>
|
||
<field name="description">OWL 组件定义与状态管理。</field>
|
||
</record>
|
||
|
||
<!-- ============ 课程 ============ -->
|
||
|
||
<record id="demo_course_fullstack" model="yuthon.school.course">
|
||
<field name="name">Odoo 18 全栈开发工程师</field>
|
||
<field name="code">ODOO-101</field>
|
||
<field name="category_id" ref="demo_category_root"/>
|
||
<field name="teacher_id" ref="demo_teacher_zhang"/>
|
||
<field name="difficulty">beginner</field>
|
||
<field name="state">ongoing</field>
|
||
<field name="description">零基础到独立开发 Odoo 18 模块,覆盖模型、视图、权限、控制器。</field>
|
||
<field name="textbook_ids" eval="[(6, 0, [ref('demo_textbook'), ref('demo_textbook_owl')])]"/>
|
||
<field name="student_ids" eval="[(6, 0, [ref('demo_student_01'), ref('demo_student_02'), ref('demo_student_03'), ref('demo_student_06')])]"/>
|
||
</record>
|
||
|
||
<record id="demo_course_frontend" model="yuthon.school.course">
|
||
<field name="name">Odoo 前端 OWL 专项</field>
|
||
<field name="code">ODOO-201</field>
|
||
<field name="category_id" ref="demo_category_view"/>
|
||
<field name="teacher_id" ref="demo_teacher_li"/>
|
||
<field name="difficulty">intermediate</field>
|
||
<field name="state">recruiting</field>
|
||
<field name="description">深入 OWL 框架,掌握组件化前端开发。</field>
|
||
<field name="textbook_ids" eval="[(6, 0, [ref('demo_textbook_owl')])]"/>
|
||
<field name="student_ids" eval="[(6, 0, [ref('demo_student_07'), ref('demo_student_08'), ref('demo_student_09')])]"/>
|
||
</record>
|
||
|
||
<!-- ============ 课程大纲 ============ -->
|
||
|
||
<record id="demo_syllabus_01" model="yuthon.school.syllabus">
|
||
<field name="name">模块开发与权限设计</field>
|
||
<field name="week">第 1-2 周</field>
|
||
<field name="course_id" ref="demo_course_fullstack"/>
|
||
<field name="chapter_ids" eval="[(6, 0, [ref('demo_chapter_01'), ref('demo_chapter_04')])]"/>
|
||
<field name="objective">掌握模块清单、模型定义与 ACL 权限机制。</field>
|
||
<field name="content"><![CDATA[<p>通过动手实现一个完整模块,理解 Odoo 的开发全流程。</p>]]></field>
|
||
</record>
|
||
|
||
<record id="demo_syllabus_02" model="yuthon.school.syllabus">
|
||
<field name="name">视图与前端交互</field>
|
||
<field name="week">第 3-4 周</field>
|
||
<field name="course_id" ref="demo_course_fullstack"/>
|
||
<field name="chapter_ids" eval="[(6, 0, [ref('demo_chapter_03')])]"/>
|
||
<field name="objective">熟练使用 list/form/search/kanban 四种视图。</field>
|
||
</record>
|
||
|
||
<record id="demo_syllabus_03" model="yuthon.school.syllabus">
|
||
<field name="name">OWL 组件与状态管理</field>
|
||
<field name="week">第 1-2 周</field>
|
||
<field name="course_id" ref="demo_course_frontend"/>
|
||
<field name="chapter_ids" eval="[(6, 0, [ref('demo_chapter_owl_01'), ref('demo_chapter_owl_02')])]"/>
|
||
<field name="objective">能用 OWL 编写组件化前端页面。</field>
|
||
</record>
|
||
|
||
<!-- ============ 训练考核 ============ -->
|
||
|
||
<record id="demo_exam_01" model="yuthon.school.exam">
|
||
<field name="name">模块开发单元测验</field>
|
||
<field name="course_id" ref="demo_course_fullstack"/>
|
||
<field name="student_id" ref="demo_student_01"/>
|
||
<field name="exam_type">quiz</field>
|
||
<field name="exam_date">2026-07-21</field>
|
||
<field name="score">92</field>
|
||
<field name="state">done</field>
|
||
<field name="note">概念清晰,注意 compute 字段的 store 用法。</field>
|
||
</record>
|
||
|
||
<record id="demo_exam_02" model="yuthon.school.exam">
|
||
<field name="name">模块开发单元测验</field>
|
||
<field name="course_id" ref="demo_course_fullstack"/>
|
||
<field name="student_id" ref="demo_student_02"/>
|
||
<field name="exam_type">quiz</field>
|
||
<field name="exam_date">2026-07-21</field>
|
||
<field name="score">55</field>
|
||
<field name="state">done</field>
|
||
<field name="note">关系字段部分需要加强。</field>
|
||
</record>
|
||
|
||
<record id="demo_exam_03" model="yuthon.school.exam">
|
||
<field name="name">OWL 期中练习</field>
|
||
<field name="course_id" ref="demo_course_frontend"/>
|
||
<field name="student_id" ref="demo_student_07"/>
|
||
<field name="exam_type">practice</field>
|
||
<field name="exam_date">2026-07-28</field>
|
||
<field name="score">88</field>
|
||
<field name="state">done</field>
|
||
</record>
|
||
|
||
<record id="demo_exam_04" model="yuthon.school.exam">
|
||
<field name="name">OWL 期中练习</field>
|
||
<field name="course_id" ref="demo_course_frontend"/>
|
||
<field name="student_id" ref="demo_student_08"/>
|
||
<field name="exam_type">practice</field>
|
||
<field name="exam_date">2026-07-28</field>
|
||
<field name="score">0</field>
|
||
<field name="state">pending</field>
|
||
</record>
|
||
|
||
<!-- ============ 学习交流 ============ -->
|
||
|
||
<record id="demo_post_01" model="yuthon.school.forum_post">
|
||
<field name="name">Many2many 的 (6,0,[ids]) 怎么理解?</field>
|
||
<field name="post_type">question</field>
|
||
<field name="author_name">陈小明</field>
|
||
<field name="author_type">student</field>
|
||
<field name="course_id" ref="demo_course_fullstack"/>
|
||
<field name="content"><![CDATA[<p>在 demo 数据里看到 <code>[(6,0,[ids])]</code>,这个 6 和 0 分别代表什么?</p>]]></field>
|
||
<field name="like_count">3</field>
|
||
</record>
|
||
|
||
<record id="demo_post_reply_01" model="yuthon.school.forum_post">
|
||
<field name="name">回复:Many2many 的 (6,0,[ids])</field>
|
||
<field name="parent_id" ref="demo_post_01"/>
|
||
<field name="post_type">discuss</field>
|
||
<field name="author_name">张老师</field>
|
||
<field name="author_type">teacher</field>
|
||
<field name="content"><![CDATA[<p>6 表示「替换」,0 是保留位,[ids] 是要关联的记录 id 列表。整体含义是把当前记录的 M2M 关系替换为给定列表。</p>]]></field>
|
||
<field name="like_count">5</field>
|
||
</record>
|
||
|
||
<record id="demo_post_02" model="yuthon.school.forum_post">
|
||
<field name="name">分享:compute 字段一定要加 store 吗?</field>
|
||
<field name="post_type">share</field>
|
||
<field name="author_name">林小芳</field>
|
||
<field name="author_type">student</field>
|
||
<field name="course_id" ref="demo_course_fullstack"/>
|
||
<field name="content"><![CDATA[<p>不是必须。不加 store 每次读取都实时计算;加 store 会落库并随依赖字段变化重算,适合列表排序/搜索场景。</p>]]></field>
|
||
<field name="like_count">7</field>
|
||
</record>
|
||
|
||
<record id="demo_post_03" model="yuthon.school.forum_post">
|
||
<field name="name">OWL 里 t-on 和原生 onclick 有什么区别?</field>
|
||
<field name="post_type">question</field>
|
||
<field name="author_name">郑小伟</field>
|
||
<field name="author_type">student</field>
|
||
<field name="course_id" ref="demo_course_frontend"/>
|
||
<field name="content"><![CDATA[<p>用 t-on 绑定事件和直接写 onclick 有什么不同?</p>]]></field>
|
||
<field name="like_count">1</field>
|
||
</record>
|
||
|
||
</odoo>
|