1
我在树结构中有一些数据。使用来自孩子的数据计算(未存储)一个字段。 在表单视图中,我显示了计算字段和父字段。因此,我最终从模型中读取了很多记录 - 而且Odoo似乎计算了所有这些记录的计算字段,即使视图只需要一个记录的计算字段。Odoo字段计算了太多的记录
我认为这是由预取机制引起的,但我试图在上下文中设置prefetch_fields=False
,这并没有帮助。
任何想法如何避免计算所有不必要的值? (存储计算字段不是一个选项)。
一个简单的例子给建设一个想法:
parent_id = fields.Many2one(...)
child_ids = fields.One2many(...) # Inverse parent relation
comp = fields.Integer(compute="_compute_comp")
@api.one
def _compute_comp(self):
sum = 0
for c in self.child_ids:
sum += c._get_complicated_value()
self.comp = sum
,并与一个观点:
<field name="parent_id" />
<field name="comp" />
comp
总是计算为孩子的孩子。与<field name="parent_id" />
它也计算为所有父母的孩子。
谢谢您的回答,但我不能看到@ api.depends装饰怎么会少给我的计算... 有用于计算相关记录的字段不是一个问题 - 有外地来计算只有相关的记录是一个问题。 – cgs
看到这个链接https://github.com/odoo/odoo/blob/9.0/openerp/api.py#L169-L191 –
我真的看不到如何装饰将限制计算。如果修饰器列表中提到的字段发生变化,记录将被重新计算,但它将如何改变第一次计算? – cgs