【问题标题】:Odoo 12 I can't change the value of the calculated fieldOdoo 12 我无法更改计算字段的值
【发布时间】:2020-04-27 12:28:36
【问题描述】:

我创建了一个模块和一个计算字段,允许您从数据库中检索一个值。由于该字段是计算出来的,我不能使用该字段来创建条件。我收到错误“无法搜索非存储字段 rdv.rdv.nb_rdv。”。为了解决这个问题,我想使用 store=True 存储字段的值,但默认值为 0 并且不会更改。

这是我的字段:

projet_terminer_id = fields.Many2one('op.course',string='Projet', required = True )
name_student_id = fields.Many2one('res.users', 'Etudiant',  required=True )
date_rdv = fields.Datetime('Date de RDV', required=True)
demandeur_rdv = fields.Integer('Demandeur de RDV', default=lambda self: self.env.uid, readonly=True )
nb_rdv = fields.Integer(string='Nombre de rdv', compute="nombre_de_rdv", readonly=True)
test_field = fields.Integer('Champ de Test')

这是我的功能:

@api.multi
@api.depends('nb_rdv')
def nombre_de_rdv(self):
    for record in self:
        id_student = record.name_student_id
        id_course = record.projet_terminer_id
        nb = self.env['rdv.rdv'].sudo().search_count([('name_student_id','=', id_student.id), ('projet_terminer_id', '=', id_course.id)])
        record.nb_rdv = int(nb)

谢谢你的帮助。

【问题讨论】:

    标签: python python-3.x odoo odoo-12


    【解决方案1】:

    在装饰器中,您应该列出用于计算字段的字段,这样,当这些字段发生更改时,odoo 将监控这些字段,该字段将被重新计算。 从你的代码来看,我认为这会做到这一点

          @api.depends('name_student_id', 'projet_terminer_id')
    

    注意当你使字段存储时 Odoo 会在你升级模块时计算旧记录的值但不会在下一次做,这个操作只做一次。如果你有旧记录,你应该让字段store=False(这样写,不要只是删除store=True)升级模块然后让它再次存储并升级模块。但是对于新记录,您会注意到,当您更改其中一个字段的值时,该值将被重新计算

    【讨论】:

    • 谢谢。你的回答对我有帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多