目录 / odoo-models
odoo-models
在 Odoo 19 中定义模型(Models)、字段(Fields)、ORM、约束(Constraints)以及计算字段(Computed Fields)的指南。适用于用户需要创建模型、定义字段、编写 ORM 方法、添加约束或操作 Odoo 19 Python 模型的场景。 --- **1. 模型(Models)** 在 Odoo 中,模型用于表示业务对象。每个模型对应数据库中的一张表。使用 `_name` 属性定义模型名称,`_description` 提供人类可读的描述。 ```python from odoo import models, fields class LibraryBook(models.Model): _name = 'library.book' _description = 'Library Book' # 字段定义将在此处添加 ``` > 注意:`_name` 必须是唯一的,通常采用 `module.model_name` 格式。 --- **2. 字段(Fields)** 字段用于定义模型的数据结构。Odoo 提供了多种字段类型,如 `Char`, `Integer`, `Boolean`, `Date`, `Many2one`, `One2many`, `Many2many` 等。 ```python title = fields.Char(string='Title', required=True) author_id = fields.Many2one('res.partner', string='Author') publication_date = fields.Date(string='Publication Date') is_available = fields.Boolean(string='Available', default=True) page_count = fields.Integer(string='Page Count') ``` - `string`: 字段的显示标签。 - `required`: 是否必填。 - `default`: 默认值。 - `help`: 鼠标悬停时的提示信息。 --- **3. ORM(对象关系映射)** Odoo 的 ORM 提供了对数据库操作的抽象接口。常用方法包括: - `create(vals)`:创建新记录。 - `write(vals)`:更新记录。 - `unlink()`:删除记录。 - `search(domain)`:根据条件搜索记录。 - `browse(ids)`:通过 ID 获取记录。 - `read(fields=None)`:读取指定字段的值。 示例: ```python # 创建一本书 book_vals = { 'title': 'Odoo Development Essentials', 'author_id': partner_id, 'publication_date': '2024-01-01', } book = self.env['library.book'].create(book_vals) # 搜索所有可用的书 available_books = self.env['library.book'].search([('is_available', '=', True)]) ``` --- **4. 约束(Constraints)** 约束用于确保数据的完整性和业务规则。Odoo 支持两种类型的约束: ### a. Python 约束(使用 `@api.constrains`) 用于验证字段值的逻辑。 ```python from odoo.exceptions import ValidationError from odoo import api @api.constrains('page_count') def _check_page_count(self): for record in self: if record.page_count <= 0: raise ValidationError("Page count must be greater than zero.") ``` ### b. SQL 约束(使用 `_sql_constraints`) 在数据库层面强制执行的约束。 ```python _sql_constraints = [ ('unique_title_author', 'UNIQUE(title...
这是模型对公开材料的总结,不是官方声明,请以原链内容为准。
存档时间线
| 版本 | 存档时间 | 内容哈希 | 内容 |
|---|---|---|---|
| v1 | 2026-11-15 11:55 | 25d31358 | 可取 |
版本索引永久保留;内容副本只保留最新 1 份,更早版本仅留索引与哈希(存档时间线的证据链不会因此断裂)。
提交举报 / 纠错
侵权举报经核验成立后,我们会即时下线该条目并删除已存的内容副本。