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
我正在尝试理解 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