关注各种黑科技
B站UP主,编程教学,游戏玩家,挂B,金牛座

计算字段和默认值

前面我们的定义的字段的值都保存在数据库中(One2many除外) odoo中提供一种每次引用字段值 通过方法计算出值的方式来显示字段 如下
import random
from openerp import models, fields
class ComputedModel(models.Model):
    _name = 'test.computed'
    name = fields.Char(compute='_compute_name')
    @api.multi
    def _compute_name(self):
        for record in self:
            record.name = str(random.randint(1, 1e6))
  name = fields.Char(compute='_compute_name') 当每次rec.name时 都调用方法来计算字段的值 注意 self是一个rec集合(recordset),可以for循环出里面的单个记录 recordset还支持+号操作 单个记录可以用 . 来访问字段 依赖计算 from openerp import models, fields, api class ComputedModel(models.Model): _name = 'test.computed' name = fields.Char(compute='_compute_name') value = fields.Integer() @api.depends('value') def _compute_name(self): for record in self: self.name = "Record with value %s" % self.value 通过@api.depends('value') 当 value值改变时会自动重新计算name, 并显示在界面上 练习 添加课程小节的上课人数百分比,并用一个进度条显示 默认值 通过default=来设置字段的默认值 name = fields.Char(default="Unknown") user_id = fields.Many2one('res.users', default=lambda self: self.env.user) self.env使用方法 self.env.cr or self._cr 数据库指针 self.env.uid or self._uid 当前请求用户id self.env.user 当前请求用户记录 可以访问self.env.user.name 等 self.env.context or self._context 当前上下文 self.env.ref(xml_id) 通过xml_id访问某个记录 xml_id对应ir_model_data的name字段 self.env[model_name] 返回某个model class对象 练习 在session中添加 start_date 和 active 的默认值 注意 odoo默认的机制 会过滤掉active为False的字段,比如在tree不显示 可以用 context="{'active_test':False} 禁用这种机制 http://blog.sina.com.cn/s/blog_729a47890102vjqz.html
转载请注明出处
分享到: 更多 (0)

评论 0