我正试图理解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中,除了从One2many到Publisher的Many2one之外,我还必须显式地声明一个从Publisher到Book的Many2one关系?
在Odoo中,您还可以定义一个One2many关系:
class Publisher(models.model):
published_books = fields.One2many('whatever.book','author',string='Published books')
那么,如果我有一个publisher对象“publisher”,那么如何获得发行者已出版书籍的列表?只是publisher.published_books吗?
最后我们有了fields.Many2many
class Store(models.model):
book_ids = fields.Many2many('whatever.book',string='Books')
在这种情况下,一家商店出售许多书籍,一本书可以在许多商店出售。
那我怎么才能在店里买到这些书呢?我怎样才能买到一本书的所有商店?
另外,如果我想要book.stores和store.books,这是否意味着我必须在Book和Store模型中声明一个fields.Many2many关系?
我很惊讶这在Odoo文档中很难找到。
发布于 2019-11-03 22:00:23
是的,您必须在两个模型上添加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
https://stackoverflow.com/questions/58686202
复制