gpt4 book ai didi

python - Odoo : Computed fields, 在某些情况下不更新?

转载 作者:行者123 更新时间:2023-11-28 21:09:55 33 4
gpt4 key购买 nike

我有一个计算字段,它必须在字段更新时更新。所以我使用 @api.depends('field1') 并链接函数

field_to_compute: fields.integer(compute='the_function' store=True)

它工作正常。

但是我知道我想在 field1 取值 A 时更新它,并在 field1 取值 时保持不变>B。但是 field_to_compute 的旧值是从数据库导入的,没有计算。

所以我有两个问题:

  • 如何让用户自己设置值。 (我可以修改它,但是当我创建一个新成员时,它将被计算并且只有在第一个保存我可以在 UI 中修改它)
  • 我怎样才能做出这样的东西:

    @api.depends('field1')
    def the_function(self):
    value = self.field1
    if value == A:
    field_to_compute = 123123
    elif value == B:
    field_to_compute = stored_field_to_compute #field_to_compute

    保持与之前存储的值相同

编辑(示例):

我在当前模型中的 res.partner 中,继承了 res.partner。我有一个字段:

'model_state': field.char(compute='compute_type', string = 'Demand', store=True, readonly=True)

在 res.partner 的第二个继承中,在另一个模块中,我有 2 个字段:gradestatus,分别是一个 int 和一个多对一。计算与 model_state 相同的 compute_type,方法相同。

我也在这个 res.partner 中,有一个 one2many 字段:link_ids

所以我的功能是:

@api.depends('link_ids.type', 'link_ids.result')
def compute_type(self):
for record in self:
if self.link_ids:
if self.link_ids.result == 'A':
if self.link_ids.type == 'type1':
record.model_state = 'Mytext'
record.grade = 15
record.state = 1 #this is an id
elif self.link_ids.result == 'B':
record.model_state = 'MySecondText'
record.state = 2 #this is an id

我不会把所有东西都放上去,因为它就像 25 个 elif(不是所有的 if 等都差不多)所以它不相关。我检查了很多时间是否没有修改 record.grade,如果没有对它做任何事情,或者不知道,但它只是被清空了。

基本上,简化了,如果投票结果“OK”,我想做点什么。并将状态的 id 更改为“已接受”,提供一个文本(如标题),并给他一个更好的成绩,如果不是,他将状态的 id 更改为“已拒绝”,提供其他文本,然后保持与实际相同的成绩。

最佳答案

自己做一个prefetch(field_to_compute要存起来):

@api.multi
@api.depends('field_x')
def _compute_field_to_compute(self):
# prefetch
data = {d['id']: d['field_to_compute']
for d in self.read(['field_to_compute'])}
for record in self:
if record.field_x == '123456':
record.field_to_compute = '654321'
else:
record.field_to_compute = data.get(record.id, 'default')

关于python - Odoo : Computed fields, 在某些情况下不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37388929/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com