【问题标题】:can not add compute method无法添加计算方法
【发布时间】:2021-08-30 19:32:21
【问题描述】:

问题很简单,我只需要创建一个计算域。这是我所拥有的:

class MyModel(models.Model):
    _name = 'my.model'

    a = fields.Float()
    b = fields.Float()
    value = fields.Float(compute='_compute_value')

    @api.depends('a','b')
    def _compute_value(self):
        for record in self:
            record.value = a/b

但是当我想从数据库上的网络浏览器中检查它时,我发现它没有添加到计算中

(法语中的计算器代表计算,它是空的)

可能是什么问题?

【问题讨论】:

  • 只有当 a 和 b 字段发生变化时,您的计算字段才有效。我认为您甚至不添加 a 和 b 值。
  • 计算域在视图中“显示”时也会调用计算(方法)。
  • 您的代码示例看起来不错。所以也许你的“真实”代码有错误?可以加代码吗?

标签: python odoo odoo-12 computed-field


【解决方案1】:

要创建my.model 字段,Odoo 将执行以下查询:

INSERT INTO ir_model_fields (model_id,model,name,field_description,help,ttype,state,relation,index,store,copied,on_delete,related,readonly,required,selectable,size,translate,relation_field,relation_table,column1,column2,track_visibility) 
VALUES 
(390, 'my.model', 'a', 'A', NULL, 'float', 'base', NULL, false, true, true, NULL, NULL, false, false, true, NULL, false, NULL, NULL, NULL, NULL, NULL),
(390, 'my.model', 'b', 'B', NULL, 'float', 'base', NULL, false, true, true, NULL, NULL, false, false, true, NULL, false, NULL, NULL, NULL, NULL, NULL),
(390, 'my.model', 'value', 'Value', NULL, 'float', 'base', NULL, false, false, false, NULL, NULL, true, false, false, NULL, false, NULL, NULL, NULL, NULL, NULL),
(390, 'my.model', 'id', 'ID', NULL, 'integer', 'base', NULL, false, true, true, NULL, NULL, true, false, true, NULL, false, NULL, NULL, NULL, NULL, NULL),
(390, 'my.model', 'display_name', 'Display Name', NULL, 'char', 'base', NULL, false, false, false, NULL, NULL, true, false, false, NULL, false, NULL, NULL, NULL, NULL, NULL),
(390, 'my.model', 'create_uid', 'Created by', NULL, 'many2one', 'base', 'res.users', false, true, true, 'set null', NULL, true, false, true, NULL, false, NULL, NULL, NULL, NULL, NULL),
(390, 'my.model', 'create_date', 'Created on', NULL, 'datetime', 'base', NULL, false, true, true, NULL, NULL, true, false, true, NULL, false, NULL, NULL, NULL, NULL, NULL),
(390, 'my.model', 'write_uid', 'Last Updated by', NULL, 'many2one', 'base', 'res.users', false, true, true, 'set null', NULL, true, false, true, NULL, false, NULL, NULL, NULL, NULL, NULL),
(390, 'my.model', 'write_date', 'Last Updated on', NULL, 'datetime', 'base', NULL, false, true, true, NULL, NULL, true, false, true, NULL, false, NULL, NULL, NULL, NULL, NULL),
(390, 'my.model', '__last_update', 'Last Modified on', NULL, 'datetime', 'base', NULL, false, false, false, NULL, NULL, true, false, false, NULL, false, NULL, NULL, NULL, NULL, NULL) RETURNING id

您可以看到compute 不存在于列名中。它的值没有存储在数据库中

【讨论】:

  • 感谢您的信息,您确实回答了这个问题,但主要是我的问题是我正在从 saas 迁移到 sh,并且对于该字段,我在 compute 中有一些代码,所以我试图用 python 代码覆盖它,但它没有改变(我在compute 中总是有旧代码)。所以我试图删除模型并重新创建它,并且计算是空的(所以我发布了这个问题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2015-01-18
相关资源
最近更新 更多