Odoo python 模型 - 如何访问相关模型

Odoo python models - how to access related models

我正在尝试理解 Odoo 的模型 - 我非常了解 Django,但在理解 Odoo 时遇到了困难,主要是因为文档通常太糟糕了。

假设我有这样的模型:

class Publisher(models.model):
    name = fields.Char('Name',help='Publisher name')
    ...

class Book(model.model):
    publisher = fields.Many2one('whatever.publisher',string='Publisher')

现在假设我有一个 Book 对象 "mybook"。如何获取 Publisher 对象?只是 mybook.publisher 吗?

我还可以在 Django 中定义一个反向关系(使用 "related_name"),这样 publisher.books.all() 就会给我所有的反向关系,即出版商的所有书籍。 Odoo 中的等价物是什么?或者在 Odoo 中,除了从 Book 到 Publisher 的 Many2one 之外,我是否还必须明确声明从 Publisher 到 Book 的 One2many 关系?

在 Odoo 中,您似乎也可以定义 One2many 关系:

class Publisher(models.model):
    published_books = fields.One2many('whatever.book','author',string='Published books')

所以如果我有一个出版商对象 'publisher' 那么我如何获得出版商已出版书籍的列表?只是 publisher.published_books 吗?

终于有了字段.Many2many

class Store(models.model):
    book_ids = fields.Many2many('whatever.book',string='Books')

在这种情况下,一个 Store 卖很多书,一本书可以在很多商店。

那么我如何在商店里买到这些书呢?如何获取给定图书的所有商店?

此外,如果我想要 book.stores 以及 store.books,这是否意味着我必须在 Book 和 Store 模型中声明一个 fields.Many2many 关系?

我很震惊这在 Odoo 文档中很难找到。

是的,您必须在两个模型上添加 Many2many 字段:

class Store(models.model):
    book_ids = fields.Many2many(comodel_name='whatever.book',string='Books', column1='book_id', column2='store_id')

class Book(models.model):
    store_ids = fields.Many2many(comodel_name='whatever.store',string='Stores', column2='book_id', column1='store_id')

对于特定的商店记录,您可以使用以下方式获取所有书籍:

store.book_ids

对于特定的图书记录,您可以使用以下方法获取所有商店:

book.store_ids