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

Odoo 8中如何先选bloc再加载对应floor(无冗余关联)

Odoo 8 实现Room表单按Bloc过滤Floor(无冗余关联)

核心思路

不需要给Room表添加冗余的Bloc关联字段,而是通过临时非存储字段+onchange动态过滤的方式实现需求:在Room表单里加一个不存库的Bloc选择框,用它来触发Floor选项的过滤逻辑,既满足先选Bloc再选对应Floor的交互,又不会产生数据库冗余。

具体实现步骤

1. 在Room模型中添加临时Bloc字段

打开Room对应的Python模型文件(如room.py),添加一个非存储的bloc_id字段:

from openerp import models, fields, api

class Room(models.Model):
    _name = 'room'
    
    # 现有字段保持不变
    name = fields.Char(string='Room Name')
    floor_id = fields.Many2one('floor', string='Floor')
    
    # 添加临时非存储Bloc字段
    bloc_id = fields.Many2one('bloc', string='Bloc', store=False)

store=False是关键,这个字段不会被写入数据库,完全用于前端交互触发过滤。

2. 编写onchange事件实现动态过滤

在同一个Room模型中,添加onchange方法,当临时Bloc字段变化时,动态修改Floor字段的可选范围:

@api.onchange('bloc_id')
def onchange_bloc_id(self):
    # 切换Bloc时先清空已选的Floor,避免无效值
    self.floor_id = False
    if self.bloc_id:
        # 返回动态domain,只显示当前Bloc下的Floor
        return {'domain': {'floor_id': [('bloc_id', '=', self.bloc_id.id)]}}
    else:
        # 未选Bloc时清空Floor的可选范围
        return {'domain': {'floor_id': []}}

3. 调整Room表单视图布局

打开Room的表单视图XML文件(如room_view.xml),把临时的bloc_id字段放到floor_id字段前面,确保用户先选Bloc再选Floor:

<record id="view_room_form" model="ir.ui.view">
    <field name="name">room.form</field>
    <field name="model">room</field>
    <field name="arch" type="xml">
        <form string="Room">
            <sheet>
                <group>
                    <!-- 临时Bloc选择框放前面 -->
                    <field name="bloc_id"/>
                    <!-- 过滤后的Floor选择框 -->
                    <field name="floor_id"/>
                    <!-- 其他字段保持不变 -->
                    <field name="name"/>
                </group>
            </sheet>
        </form>
    </field>
</record>

效果验证

重启Odoo服务并更新模块后,打开Room的新建表单:

  • 先选择Bloc,Floor下拉框会自动加载该Bloc下的所有Floor
  • 切换Bloc时,已选的Floor会被清空,同时Floor选项自动更新
  • Room表的数据库结构不会新增Bloc关联字段,完全避免冗余

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:20:31