odoo初学者代码总结–hr.contract/default(5)
提前声明:本人是odoo萌新,python也只有基础,欢迎大神指点,有所不足之处还请见谅
此为本萌新学习归纳所用,毕竟有输出才有动力,废话不多说,咱们开始吧:
我们紧接上篇,继续阅读代码:
date_start = fields.Date('Start Date', required=True, default=fields.Date.today, tracking=True,
help="Start date of the contract.")
看到如上这行代码,是不是很熟悉啊,没错,在第三章(导入模块/继承/字段/字段属性)我们讲过,忘记的小伙伴可以回过头来温习一下.
我们这里也简单的说明一下:
- fields.Date(表示此字段为时间字段)
- ’Start Date’(表示在视图中显示的字段名)
- required=True(表示是否可以为空,当他的值为True时,代表他的值不可以为空)
- default=fields.Date.today(代表他的默认值为当天)
- tracking=True(表示可以生成一个跟踪变化的记录)
其中** tracking=True**我们在第四章遇到过(关联字段),而时间的默认值我们在此代码中还是第一次见到:所以给大家找出两个比较常见的例子:
default=fields.Date.today(默认值为当天)
default=fields.Datetime.now(默认值为系统当前时间)
- help=“Start date of the contract.”(为用户提示信息)
date_end = fields.Date('End Date', tracking=True,
help="End date of the contract (if it's a fixed-term contract).")
trial_date_end = fields.Date('End of Trial Period',
help="End date of the trial period (if there is one).")
如上这段代码和之前刚讲的字段差不多一样,就不再赘述.我们接着往下读:
resource_calendar_id = fields.Many2one(
'resource.calendar', 'Working Schedule',
default=lambda self: self.env.company.resource_calendar_id.id, copy=False,
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
这段代码看起来很长(折了4段),遇到如此的长代码,我们不要慌,逐一解读便好.
- fields.Many2one(首先他是关联字段)
- ’resource.calendar’(resource_calendar_id与resource.calendar为多对一关系)
- ’Working Schedule’,(表示在视图中显示的字段名)
- default(默认值)
- copy=False(不可复制)
- domain(限制)
我们先重点讲一下default里面的代码吧:
default=lambda self: self.env.company.resource_calendar_id.id
学过python的小伙伴都应该很熟悉:**lambda **为匿名函数,当然,对于本小白而言,只知其然,不知其所以然,对此函数还是懵懵懂懂的,说的不好还望大家见谅.
首先lambda匿名函数总是以lambda 开始,紧接着后面的字符串self,就是他的参数,冒号后面为方法体和返回值,默认会被返回.
也就意味着,第一个self是参数,self.env.company.resource_calendar_id.id是这个匿名方法所返回的值,再结合default,就是说此段关联字段的默认值为self.env.company.resource_calendar_id.id
那么self.env.company.resource_calendar_id.id又究竟是个什么呢?我们来逐个拆分讲解:
- self.env(获取当前环境)
- company(当前环境下的公司)
- resource_calendar_id(公司表里的一个字段)
- id(resource_calendar表里的字段)
这样理解起来也是蛮懵的,毕竟这一长串字段,一个个点来点去的,实在看的人是头皮发麻.
那么不如我们换个思路,用一段大白话来描述这段代码所表达的含义:
我的手抓到了小红,小红的脚踢到了小绿,小绿的头顶到了小黑,最后得到小黑手中的棒棒糖
self.env.company.resource_calendar_id说的是公司表下的resource_calendar_id字段,但这个字段是关联字段,系统会自动跳转到他所关联的表里,也就是resource_calendar表里,然后我们再取此表里的id值.
接下便是domain了
domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")
我们前几章学过,所以不再赘述,大概是说,只显示resource.calendar表里company_id字段为空的数据,或者数据与hr.contract表的company_id字段里数据相同的值
hr.contract是张什么表呢?还记得我们刚开始定义的表叫什么了吗?
class Contract(models.Model):
_name = 'hr.contract'
_description = 'Contract'
_inherit = ['mail.thread', 'mail.activity.mixin']
好的,今天我们就阅读到这里,下篇见OuO