odoo17入门教程第四章 模型和基本字段

在上一章的末尾,我们能够 创建一个Odoo模块。然而,在这一点上,它仍然是一个空壳,不允许我们 存储任何数据。在我们的房地产模块中,我们希望存储与 属性(名称、描述、价格、居住面积等)。Odoo框架提供 促进数据库交互的工具。

在继续练习之前,请确保已安装模块,即 必须在“应用”列表中显示为“已安装”。estate

警告

不要使用可变的全局变量。

单个Odoo实例可以在同一个python进程中并行运行多个数据库。 这些数据库中的每一个都可能安装不同的模块,因此我们不能依赖 将根据已安装的模块进行更新的全局变量。

对象关系映射

参考:可以在模型API 中找到与此主题相关的文档。

注意

目标:在本节结束时,应创建表:estate_property

$ psql -d rd-demo
rd-demo=# SELECT COUNT(*) FROM estate_property;
count
-------
    0
(1 row)

Odoo的一个关键组件是ORM层。 此层避免了手动编写大多数 SQL,并提供了可扩展性和安全性服务.

业务对象被声明为扩展的 Python 类Model,从而将它们集成到自动化中 持久性系统。

模型可以通过在其 定义。最重要的属性是 ,它是必需的,它定义了 Odoo系统中的模型。以下是 型:_name

from odoo import models

class TestModel(models.Model):
    _name = "test_model"

此定义足以让 ORM 生成名为 的数据库表。由 约定:所有模型都位于一个目录中,每个模型都以自己的方式定义 Python 文件。test_modelmodels

看看表是如何定义的,以及相应的 Python 是如何定义的 文件已导入:crm_recurring_plan

  1. 模型在文件中定义(请参阅此处crm/models/crm_recurring_plan.py)

  2. 文件导入到(请参阅此处crm_recurring_plan.pycrm/models/__init__.py)

  3. 文件夹已导入(请参阅此处modelscrm/__init__.py)

锻炼

定义房地产属性模型。

根据 CRM 模块中给出的示例,为表创建适当的文件和文件夹。estate_property

创建文件后,为模型添加最低定义。estate.property

对Python文件的任何修改都需要重新启动Odoo服务器。当我们重新启动时 服务器,我们将添加参数和:-d-u

$ ./odoo-bin --addons-path=addons,../enterprise/,../tutorials/ -d rd-demo -u estate

-u estate表示我们要升级模块,即 ORM 将 应用数据库架构更改。在本例中,它会创建一个新表。 方法 应在数据库上执行升级。 应始终用于 与 组合 .estate-d rd-demord-demo-u-d

在启动过程中,您应看到以下警告:

...
WARNING rd-demo odoo.models: The model estate.property has no _description
...
WARNING rd-demo odoo.modules.loading: The model estate.property has no access rules, consider adding one...
...

如果是这样的话,那么你应该很好!可以肯定的是,请仔细检查,如 目标psql

锻炼

添加说明。

将 a 添加到模型以删除其中一个警告。_description

模型字段

参考:可以在 Fields API 中找到与此主题相关的文档。

字段用于定义模型可以存储的内容及其存储位置。字段是 定义为模型类中的属性:

from odoo import fields, models

class TestModel(models.Model):
    _name = "test_model"
    _description = "Test Model"

    name = fields.Char()

该字段是一个nameChar它将表示为 Python unicode 和 SQL .strVARCHAR

类型

注意

目标:在本节末尾,应将几个基本字段添加到表中:estate_property

$ psql -d rd-demo

rd-demo=# \d estate_property;
                                            Table "public.estate_property"
    Column       |            Type             | Collation | Nullable |                   Default
--------------------+-----------------------------+-----------+----------+---------------------------------------------
id                 | integer                     |           | not null | nextval('estate_property_id_seq'::regclass)
create_uid         | integer                     |           |          |
create_date        | timestamp without time zone |           |          |
write_uid          | integer                     |           |          |
write_date         | timestamp without time zone |           |          |
name               | character varying           |           |          |
description        | text                        |           |          |
postcode           | character varying           |           |          |
date_availability  | date                        |           |          |
expected_price     | double precision            |           |          |
selling_price      | double precision            |           |          |
bedrooms           | integer                     |           |          |
living_area        | integer                     |           |          |
facades            | integer                     |           |          |
garage             | boolean                     |           |          |
garden             | boolean                     |           |          |
garden_area        | integer                     |           |          |
garden_orientation | character varying           |           |          |
Indexes:
    "estate_property_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "estate_property_create_uid_fkey" FOREIGN KEY (create_uid) REFERENCES res_users(id) ON DELETE SET NULL
    "estate_property_write_uid_fkey" FOREIGN KEY (write_uid) REFERENCES res_users(id) ON DELETE SET NULL

有两大类字段:“简单”字段,它们是原子的 直接存储在模型表中的值,以及链接的“关系”字段 记录(相同或不同型号)。

简单的字段示例是Boolean,Float,Char,Text,DateSelection.

锻炼

将基本字段添加到“不动产属性”表中。

将以下基本字段添加到表中:

类型

名字

描述

发短信

邮政编码

date_availability

日期

expected_price

selling_price

卧室

整数

living_area

整数

立 面

整数

车库

布尔

花园

布尔

garden_area

整数

garden_orientation

选择

该字段必须有 4 个可能的值:“North”、“South”、“East” 和“西方”。选择列表定义为元组列表,有关示例,请参阅此处garden_orientation

将字段添加到模型后,使用-u estate

$ ./odoo-bin --addons-path=addons,../enterprise/,../tutorials/ -d rd-demo -u estate

连接到并检查表的结构。你会注意到 表中还添加了几个额外的字段。我们稍后会重新审视它们。psqlestate_property

通用属性

注意

目标:在本节末尾,列 和 应 在表中不可为空:nameexpected_priceestate_property

rd-demo=# \d estate_property;
                                            Table "public.estate_property"
    Column       |            Type             | Collation | Nullable |                   Default
--------------------+-----------------------------+-----------+----------+---------------------------------------------
...
name               | character varying           |           | not null |
...
expected_price     | double precision            |           | not null |
...

与模型本身非常相似,字段可以通过传入来配置 配置属性作为参数:

name = fields.Char(required=True)

某些属性在所有字段上都可用,以下是最常见的属性:

string (str,默认值:字段名称)

UI 中字段的标签(用户可见)。

required (bool违约:False)

如果 ,则该字段不能为空。它必须具有默认值 值或在创建记录时始终被赋予一个值。True

help (str违约:'')

在 UI 中为用户提供长格式帮助工具提示。

index (bool违约:False)

请求Odoo在列上创建数据库索引

锻炼

设置现有字段的属性。

添加以下属性:

属性

名字

必填

expected_price

必填

重新启动服务器后,这两个字段都不应为空。

自动字段

参考:与本主题相关的文档可在“自动”字段中找到。

您可能已经注意到,您的模型有一些您从未定义过的字段。 Odoo在所有模型中创建了一些字段1.这些字段是 由系统管理,不能写入,但如果出现以下情况,可以读取它们 有用或必要:

id (Id)

模型记录的唯一标识符。

create_date (Datetime)

记录的创建日期。

create_uid (Many2one)

创建记录的用户。

write_date (Datetime)

记录的最后修改日期。

write_uid (Many2one)

上次修改记录的用户。

现在我们已经创建了第一个模型,让我们添加一些安全性

1

可以禁用某些的自动创建 领域

2

编写原始 SQL 查询是可能的,但需要谨慎,因为这样 绕过所有Odoo身份验证和安全机制。

猜你喜欢

转载自blog.csdn.net/qq_70140795/article/details/137591530