odoo初学者代码总结–hr.contract/关联字段(4)

odoo初学者代码总结–hr.contract/关联字段

提前声明:本人是odoo萌新,python也只有基础,欢迎大神指点,有所不足之处还请见谅
此为本萌新学习归纳所用,毕竟有输出才有动力,废话不多说,咱们开始吧:

关联字段

续昨天的代码,我们接着往下看:

employee_id = fields.Many2one('hr.employee', string='Employee', tracking=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")

此段代码用到了关联字段,关系字段可分为如下几类:

  1. many2one(本模型需要对应一个其他模型中具体的值)
  2. one2many(本模型可被引用多个值)
  3. many2many(构建第三张表记录关系,并存储对应关系)

(数据引用武汉odoo大神的总结,手动@一下OuO)

当然也可以参考(零妖大盗)的总结(模型中的字段)

关联字段,用大白话来讲,便是:

  • many2one(此模型的多个数据可以被其他模型的一个数据所引用,就好比标签吧,可爱,善良,美丽,朴素,这些标签(many)可以自由组合,对应到一个具体的人身上(one),也就是很多的标签(many)对应一个人(one))
  • one2many(和many2one是对应关系,说的是一个具体的人(one)身上有许多个标签(many),一个姐姐又高又白又漂亮又知书达理又温文尔雅)
  • many2many(一个人有许多标签,一个标签同时也对应许多人)

由于本萌新表达能力堪忧,不知道有没有给大家将明白,如果没听懂,请移步至大神处阅读.真怕本小白把大家带沟里去了.

我们来分析刚才的代码:

employee_id = fields.Many2one('hr.employee', string='Employee', tracking=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")

Many2one表示多对一关系,即多个employee_id对应一个hr.employee,string=‘Employee’,代表在视图中显示的字段名为Employee,tracking=True表示可以生成一个跟踪变化的记录.domain是限制.

domain 表达式规则:
如下引用(子规轩)的(domain详解),此处只展示出部分应用,更多详情,大家可以移步至大神处翻阅

最简单的格式:[(‘字段名’,‘操作符’,值)]

例:[(‘shenqr.user_id’,’=’,uid)]
如果是Many2one/Many2Many/One2many字段,可以通过’.‘取出对应的属性,如:(‘create_uid.company_id.parent_id’,’=’, user.company_id.id)

同时小白也为大家找到了(xavier0524)的(domain表达式规则及应用),其实这些东西并不难找,大家只要搜索一下便能很快找到,当然不想搜索的,就点此处的连接吧…

然后我们再逐步拆分理解domain:

domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]"

这里还是要注意书写格式的,规范写法才不容易出错(更不容易出了错之后一点头绪也没有).他是由双引号包围.双引号包围[]的写法,再[]里,我们以逗号拆分,可以得到如下代码:

  • ‘|’(或运算符,相信大家都不会陌生,与&,或|,非!,)
  • (‘company_id’, ‘=’, False)
  • (‘company_id’, ‘=’, company_id)

为了大家方便理解,并且不用来回翻看查找,本小白将上面的代码复制过来,以供大家阅读:

employee_id = fields.Many2one('hr.employee', string='Employee', tracking=True, domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]")

关联字段是将两个数据库的表进行关联,而domain的限制是指,employee_idcompany_idhr.employeecompany_id互相关联

这里用了hr.employeecompany_id=False,表示可以为空,就说明显示到的数据company_id可以为空.然后hr.employeecompany_id=hr.contract表里的company_id,就说明显示的数据必须在hr.contract*表里有.然后是前面的或运算符,

加在一起,用大白话来讲:
one表里的company_id字段,要么为空,要么为many表里company_id字段的值

啰啰嗦嗦说了一大堆,不知道大家有没有听明白,如果没能理解,请给本小白寄一本阅读与理解全集,小白要回炉重造啦.

我们继续往下看:

department_id = fields.Many2one('hr.department', domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", string="Department")
job_id = fields.Many2one('hr.job', domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", string='Job Position')

此段代码与刚刚讲到的一致,大家可以拿这个来练练手.其实在学数据库SQL时,经常会遇到这样的例子:一张表存储的是学生,学号,性别,联系方式什么的,一张是存储学生的学号,以及学号所对应的成绩,还有一张表存储的是学生的家庭地址,受教育情况等.

而我们用关联字段将其关联,一张是基础表,也就是那张存储学生姓名,学号,性别的表,而其他的两张表与这张基础表的学号相关联.也就是用基础表的学生工号,对应他的成绩和受教育情况.

一般情况下三张表的数据是吻合的,但事无例外,总会出现数据多了或者数据少了的情况,于是乎我们定义一个基础表,基础表有的学生,就为他关联成绩等数据.如果这个学生只有学号,姓名,没有成绩等数据,并不代表这个学生不存在,只能说明他没有考试,所以我们容许一个学生的成绩为空,受教育为空.

啰啰嗦嗦说了一大堆,只是想让初学者能明白为什么要这样做,以及这样做的原理,如果大家都懂…当我没说好咩?OwO

好的,今天的阅读代码到此结束,明天继续阅读,今天的代码并不难,主要讲了一些odoo的关联字段,有过sql基础的小伙伴一看就能看的明白,并不需要太多的解释.在此感谢大家的阅读,听小白啰啰嗦嗦说的一大堆有的没得,有错误也欢迎大神指出,

那,就先读到这里了,感谢大家阅读OuO,我们下篇见

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值