码迷,mamicode.com
首页 > 其他好文 > 详细

odoo 计算字段和默认值

时间:2019-11-08 12:16:55      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:known   depends   对象   gre   code   bre   env   一个   列表   

计算字段

如下

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还支持+号操作

依赖计算

 1 from odoo import models, fields, api
 2 ?
 3 class ComputedModel(models.Model):
 4     _name = test.computed
 5     name = fields.Char(compute=_compute_name)
 6     value = fields.Integer()
 7 ?
 8     @api.depends(value)
 9     def _compute_name(self):
10         for record in self:
11             record.name = "Record with value %s" % self.value

 

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

练习

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

models

1 taken_seats = fields.Float(string="Taken seats", compute=_taken_seats)
2 ?
3 @api.depends(seats, attendee_ids)
4 def _taken_seats(self):
5     for r in self:
6         if not r.seats:
7             r.taken_seats = 0.0
8         else:
9             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对象

odoo 计算字段和默认值

标签:known   depends   对象   gre   code   bre   env   一个   列表   

原文地址:https://www.cnblogs.com/itelephant/p/11819210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!