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