from odoo import fields, models class ProgressWizard(models.TransientModel): """批量更新学习进度向导(TransientModel 演示) TransientModel 的特点: 1. 数据存储在临时表中,定期自动清理 2. 用于弹出式向导交互,不保留持久数据 3. 权限模型与普通 Model 不同(通常不需要 unlink 权限) """ _name = 'yuthon.school.progress.wizard' _description = '批量更新学习进度' class_id = fields.Many2one( 'yuthon.school.class', string='班级', required=True, ) chapter_id = fields.Many2one( 'yuthon.school.chapter', string='章节', required=True, ) textbook_id = fields.Many2one( 'yuthon.school.textbook', string='所属教材', related='chapter_id.textbook_id', readonly=True, ) progress_value = fields.Float( string='设置进度(%)', default=100.0, help='将该班级所有学生此章节的进度设置为该值(0-100)', ) completed = fields.Boolean( string='标记为已完成', default=True, ) def action_apply(self): """批量更新该班级所有学生的指定章节进度""" self.ensure_one() Progress = self.env['yuthon.school.progress'] students = self.class_id.student_ids now = fields.Datetime.now() for student in students: existing = Progress.search([ ('student_id', '=', student.id), ('chapter_id', '=', self.chapter_id.id), ], limit=1) if existing: existing.write({ 'progress': self.progress_value, 'completed': self.completed, 'last_study_date': now, }) else: Progress.create({ 'student_id': student.id, 'chapter_id': self.chapter_id.id, 'textbook_id': self.chapter_id.textbook_id.id, 'progress': self.progress_value, 'completed': self.completed, 'last_study_date': now, }) return {'type': 'ir.actions.act_window_close'}