From d0a3b3291ab28cee85e3538cdc97616bc8debefb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?= Date: Fri, 5 Jun 2026 15:15:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/ai_report_template_config.py | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/yuthon_ai_agent/models/ai_report_template_config.py b/yuthon_ai_agent/models/ai_report_template_config.py index c8696fc22..2a81148da 100644 --- a/yuthon_ai_agent/models/ai_report_template_config.py +++ b/yuthon_ai_agent/models/ai_report_template_config.py @@ -20,7 +20,7 @@ class AiReportTemplateColumn(models.Model): field_id = fields.Many2one('ir.model.fields', string='字段', domain="[('model_id', '=', model_id)]", help='选择模型字段,自动填充字段名和显示名称') - field_name = fields.Char('字段名', required=True) + field_name = fields.Char('字段名', required=True) # 保持 required=True label = fields.Char('显示名称', help='不填则默认使用字段名') width = fields.Integer('列宽', default=120) @@ -46,6 +46,32 @@ class AiReportTemplateColumn(models.Model): if not self.label: self.label = self.field_id.field_description + # 添加 create 和 write 方法确保 field_name 有值 + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + # 如果有 field_id 但没有 field_name,自动填充 + if vals.get('field_id') and not vals.get('field_name'): + field = self.env['ir.model.fields'].browse(vals['field_id']) + if field.exists(): + vals['field_name'] = field.name + if not vals.get('label'): + vals['label'] = field.field_description + # 如果既没有 field_id 也没有 field_name,抛出友好错误 + if not vals.get('field_name'): + raise ValidationError(_('列定义必须指定字段名(field_name)或选择字段(field_id)')) + return super().create(vals_list) + + def write(self, vals): + # 处理 write 操作 + if vals.get('field_id') and not vals.get('field_name'): + field = self.env['ir.model.fields'].browse(vals['field_id']) + if field.exists(): + vals['field_name'] = field.name + if vals.get('label') is None and not self.label: + vals['label'] = field.field_description + return super().write(vals) + @api.constrains('color_value', 'cell_color') def _check_color_value(self): for rec in self: