odoo(六):自建应用入门—模型和基本字段
在上一节中我们已经创建了一个基本的odoo应用,此时它仍然是一个空壳,不允许我们存储任何数据。在我们的房地产模块中,我们希望将与房产相关的信息(名称、描述、价格、居住面积……)存储在数据库中。Odoo 框架提供了促进数据库交互的工具。
前提:确保estate模块已安装
对象关系映射(ORM)
Odoo 的一个关键组件是ORM层。该层避免了必须手动编写大多数SQL 并提供可扩展性和安全服务2。
业务对象被声明为 Python 类扩展 Model,这将它们集成到自动化持久性系统中。
可以通过在定义中设置属性来配置模型。最重要的属性是 _name,它是必需的,它定义了 Odoo 系统中模型的名称。这是模型的最低定义:
from odoo import models
class EstateProperty(models.Model):
_name = 'estate.property'
这个定义足以让 ORM 生成一个名为estate_property的表。 该模型中的.会被ORM中的_name自动转换成_。
模型字段
类型
- 简单字段:直接存储在模型表中的值
- 关系字段:用于连接(相同或不同模型)记录
该模块中用到的字段
| 字段 | 类型 |
|---|---|
| name | Char |
| addr | Char |
| description | Text |
| postcode | Char |
| date_availability | Date |
| expected_price | Integer |
| selling_price | Integer |
| bedrooms | Integer |
| kitchen | Boolean |
| living_area | Float |
| garage | Boolean |
| drawing_room | Boolean |
| balcony | Boolean |
| balcony_orientation | Selection |
| last_seen | Datetime |
通用属性
就像模型本身一样,可以通过将配置属性作为参数传递来配置字段:
name = field.Char(string="名称", required=True)
某些属性可用于所有字段,以下是最常见的属性:
string:str,默认字段名称, UI 中字段的标签(用户可见)required:bool,默认False,如果设置为True,该字段不能为空,它必须具有默认值或始终被赋予一个值help:str,默认'',在 UI 中为用户提供长格式的帮助工具提示。index:bool,默认False,创建数据库索引
自动字段
模型的一些未定义过的字段。Odoo 在所有模型创建了一些字段。这些字段由系统管理,无法写入,但如果有用或必要,可以读取它们:
-
id:id,模型记录的唯一标识符 -
create_date:Datetime,记录的创建日期 -
create_uid:Many2one,创建记录的用户 -
write_date:Datetime,记录的最后修改日期 -
write_uid:Many2one,最后修改记录的用户
代码
代码
my_addons\estate_test\models\estate_property.py
from odoo import models, fields
class EstateProperty(models.Model):
_name = 'estate.property'
_description = '房地产广告模块'
name = fields.Char(string='名称', required=True, default="Unknown")
addr = fields.Char(string='地址')
description = fields.Text(string='描述')
postcode = fields.Char(string='邮政编码')
date_availability = fields.Date(string='可用日期')
expected_price = fields.Float(string='预期价格')
selling_price = fields.Float(string='售价')
bedrooms = fields.Integer(string='卧室')
kitchen = fields.Boolean(string='厨房')
living_area = fields.Integer(string='居住面积')
garage = fields.Boolean(string='车库/停车位')
drawing_room = fields.Boolean(string='客厅')
balcony = fields.Boolean(string='阳台')
balcony_orientation = fields.Selection([('East', '东'),
('South', '南'),
('West', '西'),
('North', '北')],
string='阳台朝向')
last_seen = fields.Datetime("最后修改时间", default=lambda self: fields.Datetime.now())
查看模型信息
前提:已激活开发者模式
升级模块--->在设置页面--->技术 ---> 模型 ---> 搜索estate.property ---> 查看模型信息