Odoo12-新手村任务(5)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29654325/article/details/85054254

计算字段和默认值

  我们的大部分字段都是直接在数据库中存储和检索的。其实字段的值也可以通过调用model中的一个方法实时计算。

  为了创建计算字段,我们需要创建一个字段并且给它的属性compute指定一个方法,这个计算方法能够对每一条记录直接计算设置值。

  计算方法接收的self一般都是记录集,是多条数据的一个集合,而计算方法实际是对每一条记录的对应字段赋值,所以我们一般需要对方法使用@api.multi装饰并且通过for rec in self来循环处理。

import random
from odoo import models, fields, api

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))

依赖

  计算字段的值经常需要依赖其他字段的值,我们通过使用@api.depends(‘fields1’,‘fields2’)来装饰计算方法。当依赖的字段被改变的时候,计算字段会被重新计算。

from odoo 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:
            record.name = "Record with value %s" % record.value

默认值

  每一个字段都可以拥有一个默认值,在字段定义的时候添加一个default=X的属性即可,X可以是一个python的可迭代值或者一个拥有返回记录集的方法。

name = fields.Char(default="Unknown")
user_id = fields.Many2one('res.users', default=lambda self: self.env.user)
self.env的使用情况
  1. 数据库游标获取 self.env.cr 或者 self._cr
  2. 当前登录数据库的用户ID self.env.uid 或者 self._uid
  3. 当前登录用户的记录对象 self.env.user
  4. 上下文值字典 self.env.context 或者 self._context
  5. self.env.ref(xml_id) 返回对应的xml对象的ID - 视图return用的比较多
  6. self.env[model_name]返回一个模型的实例 不是记录实例

猜你喜欢

转载自blog.csdn.net/qq_29654325/article/details/85054254