from odoo import fields, models, api class VideoCategory(models.Model): _name = 'yuthon.school.category' _description = '学习目录' _order = 'complete_name' _parent_store = True name = fields.Char( string='目录名称', required=True, help='如:Odoo 基础入门、模型开发、视图开发等', ) parent_id = fields.Many2one( 'yuthon.school.category', string='上级目录', index=True, ondelete='restrict', help='选择上级目录以建立层级结构', ) parent_path = fields.Char( index=True, unaccent=False, ) child_ids = fields.One2many( 'yuthon.school.category', 'parent_id', string='下级目录', ) complete_name = fields.Char( string='完整路径', compute='_compute_complete_name', store=True, recursive=True, help='显示完整路径,如:Odoo 开发 > 模型开发 > 关系字段', ) level = fields.Selection( [('beginner', '入门'), ('intermediate', '进阶'), ('advanced', '高级')], string='难度等级', default='beginner', help='该目录对应的学习难度', ) description = fields.Text( string='目录说明', help='该学习目录的详细说明', ) video_ids = fields.One2many( 'yuthon.school.video', 'category_id', string='教学视频', ) video_count = fields.Integer( string='视频数量', compute='_compute_video_count', store=True, ) active = fields.Boolean( string='启用', default=True, ) @api.depends('name', 'parent_id.complete_name') def _compute_complete_name(self): for record in self: if record.parent_id: record.complete_name = f'{record.parent_id.complete_name} > {record.name}' else: record.complete_name = record.name @api.depends('video_ids') def _compute_video_count(self): for record in self: record.video_count = len(record.video_ids)