好的,让我们换一个更容易理解的例子,涉及到图书和作者之间的关系。假设我们有两个模型:library.book
(图书)和 library.author
(作者)。每本图书可以有一个作者,因此我们可以使用 Many2one 关联来表示这种关系。
1. 定义模型
首先,我们定义 library.author
模型,表示作者的信息:
python">from odoo import models, fieldsclass LibraryAuthor(models.Model):_name = 'library.author'_description = 'Author'name = fields.Char(string="Author Name")
接下来,我们定义 library.book
模型,并在其中添加一个 Many2one
字段,关联到 library.author
模型:
python">class LibraryBook(models.Model):_name = 'library.book'_description = 'Book'title = fields.Char(string="Book Title")author_id = fields.Many2one('library.author', string="Author")
在这里,author_id
是一个 Many2one
字段,用于将每本书与其作者关联。
2. 使用 related
字段访问作者的字段
如果我们希望在 library.book
模型中直接访问作者的名称(例如,我们想要在书籍记录中显示作者的姓名),可以通过定义一个 related
字段来实现:
python">class LibraryBook(models.Model):_name = 'library.book'_description = 'Book'title = fields.Char(string="Book Title")author_id = fields.Many2one('library.author', string="Author")author_name = fields.Char(related='author_id.name', string="Author Name", store=True)
在这个例子中,author_name
是一个 related
字段,它通过 author_id
访问 library.author
模型中的 name
字段。每当 author_id
发生变化时,author_name
字段会自动更新。
3. 视图中使用
接下来,我们可以在 Odoo 的视图中使用这些字段。例如,在图书的表单视图中显示书名和作者姓名:
<record id="view_library_book_form" model="ir.ui.view"><field name="name">library.book.form</field><field name="model">library.book</field><field name="arch" type="xml"><form string="Book"><sheet><group><field name="title"/><field name="author_id"/><field name="author_name" readonly="1"/></group></sheet></form></field>
</record>
在这个例子中,我们在图书的表单中添加了 title
、author_id
和 author_name
字段,以便用户可以输入书名并选择作者,同时也可以看到作者的姓名。
4. 总结
通过这个例子,我们展示了如何在 library.book
模型中使用 Many2one 字段将每本书与一个作者关联,并通过 related
字段直接访问作者的名称。这种方式使得图书记录的展示更加清晰,同时也能减少重复查询数据的需要。
5. 模块依赖
为了确保 library_management 模块能够访问 library 模块中的模型,你需要在 library_management 模块的 manifest.py 文件中添加对 library 模块的依赖:
# library_management/__manifest__.py{'name': 'Library Management','version': '1.0','depends': ['library'], # 添加对 library 模块的依赖'data': ['views/library_book_views.xml',],
}