Как я могу изменить логическое значение в модели A, когда в ODOO 12 создается новый экземпляр модели B (есть поле many2one для модели A)? - PullRequest
2 голосов
/ 28 мая 2019

У меня есть две модели odoo 12 (biblio.location и biblio.book), - модель "biblio.book" содержит логическое значение "disponibile", установленное в значение по умолчанию.-модель "biblio.location" имеет множество полевых ссылок на модель "biblio.book".

я хочу, чтобы значение логического значения "disponible" в biblio.book автоматически изменялось (изменяйте также в базе данных) когда создается новый экземпляр biblio.location, другим способом, когда мы сдаем в аренду (размещаем) книгу, мы должны изменить несоответствие в книге моделей на FALSE.

я пытался "вычисляемое поле, @ api.onchange и@ api.depends ", и у меня ничего не работает, пожалуйста, помогите мне в этом вопросе, и я хочу знать разницу между этими тремя методами. Спасибо

книга класса (models.Model):

_name = 'biblio.book'
_description = 'All books'
name=fields.Char()
annee_edition = fields.Date(string="année d'édition")
ISBN = fields.Integer(required=True)
editor = fields.Char(required=True)
auteur = fields.Many2many('biblio.author',string='auteur_livre',required=True)

disponible = fields.Boolean (по умолчанию = True, требуется = True, related = 'biblio.location.disponible', store = True)

расположение класса (models.Model):

_name = 'biblio.location'
_description = 'All librarians'

name=fields.Char()
livre = fields.Many2one('biblio.book',string='livre',required=True,domain =[('disponible','=',True)])
client = fields.Many2one('biblio.customer',string="client",required=True)
date_location =fields.Datetime(required=True)
date_retour_prevu=fields.Datetime(required=True,string="Date retour prévu")
date_retour_reelle=fields.Datetime(required=True,string="Date retour réelle")

disponible = fields.Boolean (по умолчанию = False)

Файл "C: \ Users \ PycharmProjects \ Odoo12 \ odoo \ odoo \ fields.py", строка 484, в файле setup_full self._setup_related_full (модель) Файл "C: \ User \ PycharmProjects \ Odoo12 \ odoo \ odoo \ fields.py ", строка 527, в поле _setup_related_full = target._fields [name] KeyError: 'biblio' - - -

1 Ответ

0 голосов
/ 29 мая 2019

ОК, чтобы это работало так, как вам нужно, вам нужно настроить внешний ключ в вашей модели biblio.book.

book_location = fields.Many2one('biblio.location', string='Book Location')

Тогда вы можете сделать свое вычисленное поле

disponible = field.Boolean(compute='_disponible', string='Available for Loan', default=False)


@api.model
def _disponible(self):
    for book in self:
        book.disponible = True if book.book_location else False

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

...