from odoo import fields, models, api class School(models.Model): _name = 'yuthon.school.school' _description = '学校' name = fields.Char( string='学校名称', required=True, ) address = fields.Char( string='地址', ) phone = fields.Char( string='联系电话', ) principal = fields.Char( string='校长', ) class_ids = fields.One2many( 'yuthon.school.class', 'school_id', string='班级', ) class_count = fields.Integer( string='班级数', compute='_compute_counts', ) teacher_ids = fields.One2many( 'yuthon.school.teacher', 'school_id', string='教师', ) teacher_count = fields.Integer( string='教师数', compute='_compute_counts', ) active = fields.Boolean( string='启用', default=True, ) @api.depends('class_ids', 'teacher_ids') def _compute_counts(self): for record in self: record.class_count = len(record.class_ids) record.teacher_count = len(record.teacher_ids) class SchoolClass(models.Model): _name = 'yuthon.school.class' _description = '班级' name = fields.Char( string='班级名称', required=True, ) school_id = fields.Many2one( 'yuthon.school.school', string='所属学校', required=True, ondelete='cascade', ) teacher_id = fields.Many2one( 'yuthon.school.teacher', string='班主任', ) grade = fields.Char( string='年级', ) student_ids = fields.One2many( 'yuthon.school.student', 'class_id', string='学生', ) student_count = fields.Integer( string='学生数', compute='_compute_student_count', store=True, ) active = fields.Boolean( string='启用', default=True, ) @api.depends('student_ids') def _compute_student_count(self): for record in self: record.student_count = len(record.student_ids) class Teacher(models.Model): _name = 'yuthon.school.teacher' _description = '老师' name = fields.Char( string='姓名', required=True, ) school_id = fields.Many2one( 'yuthon.school.school', string='所属学校', required=True, ondelete='cascade', ) phone = fields.Char( string='联系电话', ) subject = fields.Char( string='教授方向', help='如:Odoo 模型开发、视图开发、部署运维等', ) class_ids = fields.One2many( 'yuthon.school.class', 'teacher_id', string='负责班级', ) active = fields.Boolean( string='启用', default=True, ) class Student(models.Model): _name = 'yuthon.school.student' _description = '学生' name = fields.Char( string='姓名', required=True, ) student_no = fields.Char( string='学号', ) class_id = fields.Many2one( 'yuthon.school.class', string='所属班级', ondelete='restrict', ) school_id = fields.Many2one( 'yuthon.school.school', string='所属学校', related='class_id.school_id', store=True, ) gender = fields.Selection( [('male', '男'), ('female', '女')], string='性别', ) phone = fields.Char( string='联系电话', ) enrollment_date = fields.Date( string='入学日期', ) elective_ids = fields.Many2many( 'yuthon.school.elective', 'yuthon_elective_student_rel', 'student_id', 'elective_id', string='已选选修课', ) active = fields.Boolean( string='启用', default=True, )