为什么存储计算字段odoo10在数据库中为空

Why store compute field odoo10 is null in database

我想将字段 tot_comp_survey 存储到 odoo 中的 table survey_survey 中。
使用此代码:

from odoo import api, fields, models

class Survey(models.Model):
    _inherit = 'survey.survey'

    tot_comp_survey = fields.Integer("Number of completed surveys", compute="_compute_survey_statistic", store=True)


_compute_survey_statistic:

    @api.multi
    def _compute_survey_statistic(self):
        UserInput = self.env['survey.user_input']

        sent_survey = UserInput.search([('survey_id', 'in', self.ids), ('type', '=', 'link')])
        start_survey = UserInput.search(['&', ('survey_id', 'in', self.ids), '|', ('state', '=', 'skip'), ('state', '=', 'done')])
        complete_survey = UserInput.search([('survey_id', 'in', self.ids), ('state', '=', 'done')])

        for survey in self:
            survey.tot_sent_survey = len(sent_survey.filtered(lambda user_input: user_input.survey_id == survey))
            survey.tot_start_survey = len(start_survey.filtered(lambda user_input: user_input.survey_id == survey))
            survey.tot_comp_survey = len(complete_survey.filtered(lambda user_input: user_input.survey_id == survey))

结果如下:

我想要存储在数据库中的存储字段,但是当我将此代码应用到具有 1000 行的数据库时,tot_comp_survey 在数据库中为空。

有人能帮帮我吗?
是不是少了什么?
附加信息:当我在小型数据库(只有 8 行数据)中升级这段代码时,升级过程时间是正常的,但是当我在大数据库(1000 行或更多行数据)中升级时,升级过程非常慢.

基本上是在需要的时候计算出来的。您是否尝试访问任何记录?

尝试将 @api.depends('user_input_ids', 'user_input_ids.input_type', 'user_input_ids.state') 添加到函数头。然后 Odoo 知道何时更改值。

您可能需要添加一些 One2many 字段