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 | facades | Integer |
description | Text | living_area | Float |
postcode | Char | garage | Boolean |
date_availability | Date | garden | Boolean |
expected_price | Integer | garden_area | Integer |
selling_price | Integer | balcony_orientation | Selection |
bedrooms | Integer | 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='name', required=True, default="Unknown") description = fields.Text(string='description') postcode = fields.Char(string='postcode') date_availability = fields.Date(string='data') # 2021-12-21 expected_price = fields.Float(string='expected_price') selling_price = fields.Float(string='selling_price') bedrooms = fields.Integer(string='bedrooms') living_area = fields.Integer(string='living_area') facades = fields.Integer(string='facades') garage = fields.Boolean(string='garage') garden = fields.Boolean(string='garden') garden_area = fields.Integer(string='garden_area') balcony_orientation = fields.Selection([('East', 'East'), ('South', 'South'), ('West', 'West'), ('North', 'North')], string='garden_orientation') last_seen = fields.Datetime("last_seen", default=lambda self: fields.Datetime.now())
my_addons\estate_test\models\__init__.py
from . import estate_property
my_addons\estate_test\__init__.py
from . import models
查看模型信息
前提:已激活开发者模式
升级模块--->在设置页面--->技术 ---> 模型 ---> 搜索estate.property
---> 查看模型信息
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?