Модели Odoo Python - как получить доступ к связанным моделям - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь понять модели 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 от издателя к книге в дополнение к Many2one от книги к издателю?

В Odoo также похоже, что вы можете определить отношение One2many:

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

Итак, если у меня есть объект издателя «издатель», то как мне получить список опубликованных книг издателя? Это просто publisher.published_books?

Наконец, у нас есть поля. Many2many

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

В этом случае Магазин продает много книг, а Книга может быть во многих магазинах.

Так как мне получить книги в магазине? Как я могу получить все магазины для данной книги?

Кроме того, если я хочу book.stores, а также store.books, означает ли это, что я должен объявить поля fields.Many2many в Book и Storeмодели?

Я в шоке, это так сложно найти в документации по Odoo.

1 Ответ

0 голосов
/ 04 ноября 2019

Да, вы должны добавить 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
...