Many2one(多对一)关联场景中,如何从模型(多)关联到模型(一)的某个字段

好的,让我们换一个更容易理解的例子,涉及到图书和作者之间的关系。假设我们有两个模型:library.book(图书)和 library.author(作者)。每本图书可以有一个作者,因此我们可以使用 Many2one 关联来表示这种关系。

1. 定义模型

首先,我们定义 library.author 模型,表示作者的信息:

from odoo import models, fields

class LibraryAuthor(models.Model):
    _name = 'library.author'
    _description = 'Author'

    name = fields.Char(string="Author Name")

接下来,我们定义 library.book 模型,并在其中添加一个 Many2one 字段,关联到 library.author 模型:

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 字段来实现:

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>

在这个例子中,我们在图书的表单中添加了 titleauthor_idauthor_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',
    ],
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弄堂汪

看了觉得好,就请我喝瓶水吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值