在Odoo 8中是否有任何方法可以创建仅在满足某些条件时计算的字段,否则用户将能够设置其值?
Example
我有一个名为 box
的模型,它有一个名为 value
的浮点字段 .
想象一下,一个盒子里面可以有几个盒子,每个盒子都有自己的 Value .
因此,我们有一个名为 child_ids
的one2many字段指向 box
,还有一个名为 parent_id
pointig的many2one指向框 .
现在我想要以下行为:用户可以设置一个框内的 value
字段,里面没有任何框(这意味着, childs_ids
为False),但是,如果框内至少有一个框(这意味着, childs_ids
不是假),必须计算 value
字段,它将是其子项 value
的总和 .
有没有人知道如何实现这种行为?
我把我的代码放在了不工作的地方( value
的值总是被重置为0):
class box(models.Model):
_name='box'
@api.one
@api.depends('child_ids', 'child_ids.value')
def _compute_value(self):
if self.child_ids:
self.value = sum(
[child.value for child in self.child_ids])
def _set_value(self):
pass
parent_id = fields.Many2one(comodel_name='box',
string='Parent Box')
child_ids = fields.One2many(comodel_name='box',
inverse_name='parent_id',
string='Boxes inside')
value = fields.Float(
string='Value',
compute='_compute_value',
inverse='_set_value',
store=False,
required=True,
readonly=True,
states={'draft':[('readonly',False)]},
)
1 回答
在模型中
在视图中
编辑:
既然你的例子更清楚了,我会说你应该改变以下内容:
将 value 的store参数设置为True而不是False,只需删除反向,在您的情况下,您不需要 .
那么你需要另外2个领域
加
在视图中:
可能有另一个解决方案,避免这个双字段,可能使用逆,但我不确定 .