odoo初学者代码总结–hr.contract/default(5)

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_idresource.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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值