为什么存储计算字段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
字段
我想将字段 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
字段