You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo日历视图无法显示One2many关联字段数据求助

Odoo日历视图无数据显示问题排查与修复

问题背景

需要为plannification.rotation模型创建日历视图,展示其One2many字段rotation_ids关联的relation.rotation模型中的chauffeur、vehicule等字段,但当前日历视图为空,无任何数据显示。

现有模型代码

plannification.rotation模型

class PlanificationRotatio(models.Model):
    _name = 'plannification.rotation'
    
    rotation_ids = fields.One2many('relation.rotation', inverse_name='planification_rotation', string="Rotation")

relation.rotation模型

class PlanifictaionRelation(models.Model):
    _name = 'relation.rotation'

    planification_rotation = fields.Many2one('plannification.rotation')
    ettats = fields.Selection([('suggestion', 'Suggestion'),
                               ('valide', 'Validé')], string='États', default="suggestion")
    sequence = fields.Char('sequence')
    vehicule = fields.Many2one('fleet.vehicle', string=" Vehicules libres", readonly="True")
    is_selected = fields.Boolean('Selection')
    chauffeur = fields.Char('Chauffeur')
    zone = fields.Char('Zone')

现有XML视图配置

<record id="view_planfication_rotation_calendar" model="ir.ui.view">
     <field name="name">planification.rotation.calendar</field>
     <field name="model">plannification.rotation</field>
     <field name="arch" type="xml">
            <calendar string="Planification" date_start="date_sortie" color="states" hide_time="true" event_limit="5">
                <field name="states" invisible="1"/>
                <field name="rotation_ids">
                     <calendar>
                         <field name="chauffeur"/>
                         <field name="vehicule"/>
                     </calendar>
                </field>
            </calendar>
     </field>
 </record>

问题原因分析

  1. 缺少日历必需的日期字段:日历视图的date_start属性指定了date_sortie,但两个模型中都未定义该字段,Odoo无法确定事件时间范围,导致无法渲染数据。
  2. 字段名称拼写错误:XML中引用的states字段不存在,模型中对应字段为ettats,字段不匹配会引发视图渲染异常。
  3. 嵌套日历视图用法错误:Odoo日历视图不支持在One2many字段下嵌套<calendar>标签,这种写法无法正确加载关联模型数据。
  4. 数据关联缺失:若relation.rotation记录未关联到plannification.rotation记录,或主模型本身无数据,也会导致视图为空。

修复步骤

步骤1:添加日期字段

日历事件实际对应relation.rotation的每条记录,给该模型添加日期字段:

class PlanifictaionRelation(models.Model):
    _name = 'relation.rotation'

    # 新增日期字段,作为日历事件的起始时间
    date_sortie = fields.Date(string="Date de sortie", required=True)
    # 原有字段保留
    planification_rotation = fields.Many2one('plannification.rotation')
    ettats = fields.Selection([('suggestion', 'Suggestion'),
                               ('valide', 'Validé')], string='États', default="suggestion")
    sequence = fields.Char('sequence')
    vehicule = fields.Many2one('fleet.vehicle', string=" Vehicules libres", readonly="True")
    is_selected = fields.Boolean('Selection')
    chauffeur = fields.Char('Chauffeur')
    zone = fields.Char('Zone')

步骤2:调整日历视图配置

直接基于relation.rotation模型创建日历视图,更符合事件逻辑:

<record id="view_relation_rotation_calendar" model="ir.ui.view">
     <field name="name">relation.rotation.calendar</field>
     <field name="model">relation.rotation</field>
     <field name="arch" type="xml">
            <calendar string="Planification des rotations" date_start="date_sortie" color="ettats" hide_time="true" event_limit="5">
                <field name="ettats" invisible="1"/>
                <field name="chauffeur"/>
                <field name="vehicule"/>
                <field name="zone"/>
                <field name="planification_rotation"/>
            </calendar>
     </field>
 </record>

若必须基于plannification.rotation模型创建,需在主模型中添加关联日期的计算字段(如取子模型最早日期),再调整视图配置,但这种方式不如直接基于子模型直观。

步骤3:确保数据有效性

  • 确认plannification.rotation存在已保存的记录。
  • 确认relation.rotation记录已关联到对应主模型记录,且date_sortie字段已填写有效值。

步骤4:生效修改

  • 升级模块,让模型和视图的修改生效。
  • 清除浏览器缓存后重新加载页面,查看日历视图数据。

内容的提问来源于stack exchange,提问作者djouher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:23:14