ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

odoo 计算字段和默认值

2019-11-08 11:52:19  阅读:414  来源: 互联网

标签:compute name fields self odoo 字段 env seats 默认值


计算字段

如下

import random
from odoo 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))

当每次调用rec.name时,都会调用compute方法来计算字段的值

self是一个record集合(recordset),可以for循环出里面的单个记录,单个记录可以用 . 来访问字段

recordset还支持+号操作

依赖计算

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" % self.value

通过@api.depends('value') 当 value值改变时会自动重新计算name, 并显示在界面上

练习

添加课程小节的上课人数百分比,并用一个进度条显示

models

    taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')

  @api.depends('seats', 'attendee_ids')
  def _taken_seats(self):
      for r in self:
          if not r.seats:
              r.taken_seats = 0.0
          else:
              r.taken_seats = 100.0 * len(r.attendee_ids) / r.seats

xml

课时列表视图和表单视图添加

<field name="taken_seats" widget="progressbar"/>

默认值

通过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对象

标签:compute,name,fields,self,odoo,字段,env,seats,默认值
来源: https://www.cnblogs.com/itelephant/p/11819210.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有