“创建数据模型”的版本间的差异
(创建页面,内容为“Odoo开发准则指出,模型的Python文件应放在一个models子目录中。为了简单起见,我们先遵循这一准则,所以让我们在todo_app模块...”) |
|||
(未显示3个用户的10个中间版本) | |||
第1行: | 第1行: | ||
− | + | Odoo 开发指导指出,模型的 Python 文件应放在一个 models 子目录中。为了简单起见,我们先不遵循这一准则,我们在 todo_app 模块的主目录中创建一个todo_model.py文件。 | |
− | + | 在文件中添加以下内容: | |
− | + | # -*- coding: utf-8 -*- | |
− | # -*- coding: utf-8 -*- | + | from odoo import models, fields |
− | from odoo import models, fields | + | class TodoTask(models.Model): |
− | class TodoTask(models.Model): | + | _name = 'todo.task' |
− | + | _description = 'To-do Task' | |
− | + | name = fields.Char('Description', required=True) | |
− | + | is_done = fields.Boolean('Done?') | |
− | + | active = fields.Boolean('Active?', default=True) | |
− | + | ||
− | + | 第一行是一个特殊的标记告诉Python解释器,这个文件有UTF-8,以便它可以期望和处理非ASCII字符。我们不会使用任何非 ANSI 字符,但无论如何这是一个很好的做法。 | |
+ | |||
+ | 第二行是Python代码import语句,从Odoo核心导入模型和字段对象。 | ||
+ | |||
+ | 第三行声明了我们的新模型。它是从models.Model派生的类。 | ||
+ | |||
+ | 第四行设置_name属性,定义将在整个Odoo中引用此模型的标识符。注意,实际的Python类名,在这个例子中,TodoTask对其他Odoo模块是无意义的。 _name值将用作标识符。 | ||
+ | |||
+ | 请注意,此行和以下行是缩进的。如果你不熟悉Python,你必须知道这是很重要的:缩进定义一个嵌套的代码块,所以这四行应该是同样缩进。 | ||
+ | |||
+ | 然后我们有_description模型属性。它不是强制性的,但它为模型记录提供了一个用户友好的名称,可用于用户友好的消息。 | ||
+ | |||
+ | 最后三行定义模型的字段。值得注意的是name和active是特殊的字段名。默认情况下,当从其他模型引用它时,Odoo将使用name字段作为记录的标题。active字段用于停用记录,默认情况下,仅显示活动记录。我们将使用它来清除已完成的任务,而不会从数据库中删除它们。 | ||
+ | |||
+ | 现在,该文件尚未被模块使用。我们必须告诉Python使用__init__.py文件中的模块加载它。让我们编辑它以添加以下行: | ||
+ | |||
+ | from . import todo_model | ||
+ | |||
+ | 就是这样而已!为了使我们的Python代码更改生效,服务器实例需要重新启动(除非它使用--dev模式)。 | ||
+ | |||
+ | 我们不会看到任何菜单选项来访问这个新模型,因为我们还没有添加它们。我们仍然可以使用技术菜单查看新创建的模型。在顶部菜单设置中,转到技术|数据库结构|模型,在列表中搜索todo.task模型,并单击它以查看其定义: | ||
+ | |||
+ | [[File:Odoo_moduls.png|caption]] | ||
+ | |||
+ | 如果一切正常,则确认已创建模型和字段。如果您在此处看不到它们,请尝试重新启动服务器并进行模块升级,如前所述。 | ||
+ | |||
+ | 我们还可以看到一些我们没有声明的额外字段。这些是Odoo自动添加到每个新模型的保留字段。它们如下所示: | ||
+ | *id是模型中每个记录的唯一数字标识符。 | ||
+ | *create_date和create_uid指定创建记录的时间和由谁创建它。 | ||
+ | *write_date和write_uid确认记录的上次修改时间以及谁对其进行了修改。 | ||
+ | *__last_update是一个实际上不存储在数据库中的帮助信息。它用于并发检查。 | ||
+ | 上一节:[[模型层]] | ||
+ | 下一节:[[加入自动化测试]] |
2017年4月17日 (一) 02:17的最新版本
Odoo 开发指导指出,模型的 Python 文件应放在一个 models 子目录中。为了简单起见,我们先不遵循这一准则,我们在 todo_app 模块的主目录中创建一个todo_model.py文件。
在文件中添加以下内容:
# -*- coding: utf-8 -*- from odoo import models, fields class TodoTask(models.Model): _name = 'todo.task' _description = 'To-do Task' name = fields.Char('Description', required=True) is_done = fields.Boolean('Done?') active = fields.Boolean('Active?', default=True)
第一行是一个特殊的标记告诉Python解释器,这个文件有UTF-8,以便它可以期望和处理非ASCII字符。我们不会使用任何非 ANSI 字符,但无论如何这是一个很好的做法。
第二行是Python代码import语句,从Odoo核心导入模型和字段对象。
第三行声明了我们的新模型。它是从models.Model派生的类。
第四行设置_name属性,定义将在整个Odoo中引用此模型的标识符。注意,实际的Python类名,在这个例子中,TodoTask对其他Odoo模块是无意义的。 _name值将用作标识符。
请注意,此行和以下行是缩进的。如果你不熟悉Python,你必须知道这是很重要的:缩进定义一个嵌套的代码块,所以这四行应该是同样缩进。
然后我们有_description模型属性。它不是强制性的,但它为模型记录提供了一个用户友好的名称,可用于用户友好的消息。
最后三行定义模型的字段。值得注意的是name和active是特殊的字段名。默认情况下,当从其他模型引用它时,Odoo将使用name字段作为记录的标题。active字段用于停用记录,默认情况下,仅显示活动记录。我们将使用它来清除已完成的任务,而不会从数据库中删除它们。
现在,该文件尚未被模块使用。我们必须告诉Python使用__init__.py文件中的模块加载它。让我们编辑它以添加以下行:
from . import todo_model
就是这样而已!为了使我们的Python代码更改生效,服务器实例需要重新启动(除非它使用--dev模式)。
我们不会看到任何菜单选项来访问这个新模型,因为我们还没有添加它们。我们仍然可以使用技术菜单查看新创建的模型。在顶部菜单设置中,转到技术|数据库结构|模型,在列表中搜索todo.task模型,并单击它以查看其定义:
如果一切正常,则确认已创建模型和字段。如果您在此处看不到它们,请尝试重新启动服务器并进行模块升级,如前所述。
我们还可以看到一些我们没有声明的额外字段。这些是Odoo自动添加到每个新模型的保留字段。它们如下所示:
- id是模型中每个记录的唯一数字标识符。
- create_date和create_uid指定创建记录的时间和由谁创建它。
- write_date和write_uid确认记录的上次修改时间以及谁对其进行了修改。
- __last_update是一个实际上不存储在数据库中的帮助信息。它用于并发检查。
上一节:模型层 下一节:加入自动化测试