创建数据模型

来自Odoo V
跳转至: 导航搜索

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模型,并单击它以查看其定义:

caption

如果一切正常,则确认已创建模型和字段。如果您在此处看不到它们,请尝试重新启动服务器并进行模块升级,如前所述。

我们还可以看到一些我们没有声明的额外字段。这些是Odoo自动添加到每个新模型的保留字段。它们如下所示:

  • id是模型中每个记录的唯一数字标识符。
  • create_date和create_uid指定创建记录的时间和由谁创建它。
  • write_date和write_uid确认记录的上次修改时间以及谁对其进行了修改。
  • __last_update是一个实际上不存储在数据库中的帮助信息。它用于并发检查。
上一节:模型层
下一节:加入自动化测试