首页 > 其他 > 详细

odoo 操作Many2many 和One2many字段

时间:2019-11-26 15:34:52      阅读:589      评论:0      收藏:0      [点我收藏+]

many2many

(0,0,{values}) 根据values里面的信息新建一个记录。

(1,ID,{values})更新id=ID的记录(写入values里面的数据)

(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

(3,ID) 切断主从数据的链接关系但是不删除这个数据

(4,ID) 为id=ID的数据添加主从链接关系。

(5) 删除所有的从数据的链接关系就是向所有的从数据调用(3,ID)

(6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行(5)再执行循环IDs执行(4,ID))

例子[(6, 0, [8, 5, 6, 4])] 设置 many2many to ids [8, 5, 6, 4]

one2many

(0, 0,{ values })根据values里面的信息新建一个记录。

(1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据)

(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)

 

举例说明:

#course_partner为一个many2many字段,现在可以在别的模型添加studentcourseline对象,则就要操作many2many字段了
class
StudentCourseLine(models.Model): _name = xksystem.studentcourseline _description = xksystem.studentcourseline linenumber = fields.Char(string=序号,default = lambda self:self.env[ir.sequence].next_by_code(seq.test)) student_id = fields.Many2one(xksystem.student,ondelete=cascade) course_id = fields.Many2one(xksystem.course,string=课程名称) coursecode = fields.Text(string=课程代码) course_partner = fields.Many2many(xksystem.student, xksystem_student_xksystem_student_rel, student01_id, student02_id, string=学习伙伴)
@api.multi
    def xk_btn(self):
        # --点击选课按钮,然后创建一笔学生课程资料
        res = self.env[res.users].search([(id, =, self.env.uid)])  # 获取当前用户的ID
        print(res.login)
        code = res.login  # 获取当前用户的学号
        res = self.env[xksystem.student].search([(code, =, code)])  # 以学号获取当前学生头表信息
        if res.id:
            # 检索是否已经选过此门课程
            res_course = self.env[xksystem.studentcourseline].search([&, (student_id, =, res.id),
                                                                        (coursecode, =, self.id)])
            if res_course:
                print(此门课程已被选过了,不能重复选择!)
                raise UserError((你已经选过了这门课,不能重复选择!))
            else:
                # 防止大量并发选课,每位学生随机停止0-1秒
                sleep_time = random.random()
                print(sleep_time)
                time.sleep(sleep_time)

                # 检索课程是否已经被选光
                l_sql = "select course_id,count(*) from xksystem_studentcourseline "                         "where course_id = %s group by course_id" % (self.id)
                self.env.cr.execute(l_sql)
                dicts = self.env.cr.dictfetchall()
                if len(dicts)==0:
                    havastudent_count = 0
                else:
                    havastudent_count = dicts[0][count]

                if havastudent_count >= self.studentlimit:
                    raise UserError((选课学生人数已经超过上限,请选择其他课程!))

                # 合规,系统进行选课
                vals = {linenumber: self.env[ir.sequence].next_by_code(seq.test), student_id: res.id,
                        course_id: self.id, coursecode: self.code,course_partner:[(6, 0, [2,3])]}       #course_partner字段通过操作many2many字段创建
                self.env[xksystem.studentcourseline].sudo().create(vals)
        else:
            raise UserError((此账户不是学生账户,不能选课!))
        return True

技术分享图片

 

 

 

odoo 操作Many2many 和One2many字段

原文:https://www.cnblogs.com/smarttony/p/11935382.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!