【问题标题】:How can i change a boolean value in model A, when a new instance of model B (have many2one field to model A) is created in ODOO 12?当在 ODOO 12 中创建模型 B 的新实例(模型 A 具有 many2one 字段)时,如何更改模型 A 中的布尔值?
【发布时间】:2019-10-14 01:22:51
【问题描述】:

我有两个 odoo 12 模型,(biblio.location 和 biblio.book), -模型“biblio.book”包含一个布尔值“disponibile”,默认设置为true。 - 模型“biblio.location”有很多字段引用模型“biblio.book”。

我希望在创建 biblio.location 的新实例时自动更改 biblio.book 中的布尔“disponible”的值(也在数据库中更改),以其他方式,当我们租用(位置)一本书时必须将模型书中的责任更改为 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(default=True,required=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(default=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 field = target._fields[name] KeyError: 'biblio' - - -

【问题讨论】:

    标签: python-3.x odoo-12


    【解决方案1】:

    好的,要按您希望的方式工作,您需要在 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
    

    您不想将其设置为可存储,因为您希望它在每次调用该字段时检查。如果您将其设置为可存储,它将仅在创建记录时计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多