odoo 计算字段和默认值

计算字段

如下

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

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

时间: 2024-10-21 14:56:43

odoo 计算字段和默认值的相关文章

SQL 添加字段和默认值脚本

--插入字段和默认值alter table Acc_WayBill add DeclaredValue nvarchar(50)goEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'申明价值' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Acc_WayBill', @level2type=N'COLUM

JIRA中设置[描述]字段的默认值

公司使用JIRA已经一段时间了,期间也是各种需求,免不了很多自定义的功能或需求,在没有购买技术支持的情况下,有的或许可以自行尝试实现,有的也只能是无能为力.当然,这篇文章别的不说,单说设置描述description字段的默认值的实现方式. 所需要设置默认值的字段就是上图中红框的描述字段,这里是汉化后的界面,如果是未汉化此处应为description,我要实现的就是右侧方框中自动出现我设置的格式,也即只要用户创建一个问题,在弹出的窗口中就会自动出现我定义的描述默认值. 1.备份源文件 要修改的文件

mysql修改表中某个字段的默认值

Mysql中用SQL增加.删除字段,修改字段名.字段类型.注释,调整字段顺序总结 在网站重构中,通常会进行数据结构的修改,所以添加,删除,增加mysql表的字段是难免的,有时为了方便,还会增加修改表或字段的注释,把同字段属性调整到一块儿.这些操作可以在phpmyadmin或者别的mysql管理工具中完成,但是我们有时为了更方便的管理,会选择写sql语句来实现. 1.增加一个字段  代码如下 复制代码 //增加一个字段,默认为空alter table user add COLUMN new1 VA

查询字段的默认值

--使用在SQL2008,***查询字段说明和默认值 select object_name(c.id) as 表名 ,c.name as 字段名 ,t.name as 数据类型 ,c.prec as 长度 , p.value as 字段说明 ,m.text as 默认值 from syscolumns c inner join systypes t on c.xusertype=t.xusertype left join sys.extended_properties p on c.id=p.m

MySQL5.0+提示字段没有默认值(doesn’t have a default value)的解决方法

方法一: 打开my.ini,查找 sql-mode=”STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION” 修改为 sql-mode=”NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION” 然后重启MYSQL . 方法二: MySQL 5 uses a strict mode which needs to be disabled. In Windows, Goto Start–>Progr

Django的model中日期字段设置默认值的问题

之前写过这样一个model: class MonthlyFeeMember(models.Model): worker = models.ForeignKey(Student, verbose_name=u"主检查人", related_name="as_monthly_fee_members") month = models.CharField(u'检查月份', max_length=10, default=get_current_month()) check_d

JPA为字段设置默认值

http://blog.csdn.net/u011983531/article/details/51286839 在使用JPA时,如果需要为属性设置默认值,很自然的,你可能会想到用下面的方式. @Column(name="state",columnDefinition="tinyint default 0") private Integer state=0;但很不幸的是,这种方案有时候并不可行,原因在于columnDefinition是在创建表的时候使用的,如果你的

Hibernate Annotation 设置字段的默认值

很简单,不过有点莫名其妙的意思 @Column(name="powerLoad",columnDefinition="bit(1) default 1 ") private boolean load = true; 其实就是在 @Column中加入 columnDefinition属性 里面的值,就是你的字段的SQL中,接在字段名后面的描述 (也有人叫ddl) 上面是布尔类型的,字符型的如下: columnDefinition="varchar(255)

修改mysql数据库字段内容默认值为当前时间

https://www.cnblogs.com/testway/p/5531969.html --添加CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER TABLE table_name ADD COLUMN CreateTime datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' ; --修改CreateTime 设置默认时间 CURRENT_TIMESTAMP ALTER TABLE table_nam