第 3 章:模型和基本字段
在上一章的结尾,我们能够创建Odoo模块。然而,在这一点上,它仍然是一个空壳,不允许我们存储任何数据。在我们的real estate模块中,我们想要存储与属性(名称、描述、价格、居住面积等)。Odoo 框架提供工具来促进数据库交互。
在继续练习之前,请确保已安装模块,即它必须在 Apps 列表中显示为 'Installed'。
Odoo的一个关键组件是ORM层。此层避免了手动编写大多数SQL,并提供可扩展性和安全服务。
业务对象被声明为Python类扩展Model,这会将它们集成到自动化的持久化系统。
可以通过在定义中设置属性进行配置。最重要的属性是_name,它是必需的,它定义了Odoo 系统中的名称。以下是模型的最低定义:
from odoo import models
class TestModel(models.Model):
_name = "test_model"
此定义足以让ORM生成名为test_model的数据库表。约定所有模型都位于models目录中,每个模型都在其自己的Python文件。
字段用于定义模型可以存储的内容以及存储位置。字段在model类中定义为 attributes:
from odoo import fields, models
class TestModel(models.Model):
_name = "test_model"
_description = "Test Model"
name = fields.Char()
该name字段是一个Char,它将表示为Python unicode str和SQL VARCHAR。
字段分为两大类:“简单”字段,它们是原子的直接存储在模型表中的值,和“关系”字段用来链接记录(相同或不同模型)。
简单的字段示例包括Boolean,Float,Char,Text,Date和Selection。
我们的表estate_property(房产属性)需要以下这些字段:
Field |
Type |
name |
Char |
description |
Text |
postcode |
Char |
date_availability |
Date |
expected_price |
Float |
selling_price |
Float |
bedrooms |
Integer |
living_area |
Integer |
facades |
Integer |
garage |
Boolean |
garden |
Boolean |
garden_area |
Integer |
garden_orientation |
Selection |
garden_orientation该字段必须有4个可能的值:“North”、“South”、“East” 和“West”。
你可以使用下面的代码真正创建一个estate_property表,新建models/estate_property.py:。
from odoo import models, fields, api
class EstateProperty(models.Model):
_name = "estate_property"
_description = "Estate Property"
name = fields.Char(required=True)
description = fields.Text()
postcode = fields.Char()
date_available = fields.Date()
expected_price = fields.Float(required=True)
selling_price = fields.Float()
bedrooms = fields.Integer()
living_area = fields.Integer()
facades = fields.Integer() # 外墙
garage = fields.Boolean()
garden = fields.Boolean()
garden_area = fields.Integer()
garden_orientation = fields.Selection([
("north", "North"),
("south", "South"),
("east", "East"),
("west", "West"),
])
某些属性在所有字段上都可用,以下是最常见的属性:
string (str,默认值:字段名称)
UI 中字段的标签(对用户可见)。
required (bool默认值:False)
如果为True,则字段不能为空。它必须具有默认值,或者在创建记录时始终被赋予一个值。
help (str默认值:'')
在 UI 中为用户提供帮助提示。
index (bool默认值:False)
请求 Odoo 在列上创建数据库索引。
您可能已经注意到,您的模型有一些您从未定义的字段。Odoo在所有模型中创建一些字段。这些字段是由系统管理,无法写入,但如果有用或必要,则可以读取它们:
id (Id)
模型记录的唯一标识符。
create_date (Datetime)
记录的创建日期。
create_uid (Many2one)
创建记录的用户。
write_date (Datetime)
记录的上次修改日期。
write_uid (Many2one)
上次修改记录的用户。
以下是我们现在的文件结构:
addons/estate
├── models
│ ├── estate_property.py
│ └── __init__.py
├── __init__.py
└── __manifest__.py
models/__init__.py:
from . import estate_property
estate/__init__.py:
from . import models
最后重启你的Odoo。使用数据库管理软件,例如pgadmin4,就能看到你新创建的表啦!
如果还看不到,找到你的模块,点击Upgrade。
第3章:模型和基本字段