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

Odoo 11中扩展mrp.production模型state字段遇问题求助

解决Odoo 11中扩展MRP Production State字段的问题

在Odoo 11里你遇到的AttributeError: 'mrp.production' object has no attribute '_columns',核心原因是新ORM API已经完全取代了旧API的字段定义逻辑:_columns是Odoo 7及更早版本的旧API属性,在Odoo 11中已经被_fields取代,而且直接重写__init__方法来修改字段也不是新API推荐的实现方式。

下面给你两种正确的解决方案:

方法1:直接通过字段继承扩展(推荐)

Odoo 11+提供了简洁的方式来扩展selection字段,只需要在继承模型时重新定义该字段,使用selection_add参数添加新选项即可,Odoo会自动合并原有选项和新选项:

from odoo import models, fields
import logging

_logger = logging.getLogger(__name__)

class MrpProduction(models.Model):
    _inherit = 'mrp.production'

    state = fields.Selection(
        selection_add=[('other_state', 'My State')],
        # 可选:定义当该选项被删除时的处理行为,比如设置为默认值
        ondelete={'other_state': 'set default'}
    )

这种方式代码简洁、符合Odoo新API的设计规范,不需要手动处理原有选项的合并逻辑。

方法2:动态添加选项(适用于复杂逻辑场景)

如果你的需求需要动态判断是否添加新选项(比如根据特定条件),可以通过模型的_fields属性操作,但要在_setup_fields方法中执行(这是Odoo新API中字段初始化的合适时机),而不是重写__init__:

from odoo import models, fields
import logging

_logger = logging.getLogger(__name__)

class MrpProduction(models.Model):
    _inherit = 'mrp.production'

    def _setup_fields(self):
        # 先执行父类的字段初始化逻辑
        super(MrpProduction, self)._setup_fields()
        
        # 获取原有的state选项列表
        current_states = self._fields['state'].selection
        new_state = ('other_state', 'My State')
        
        # 检查新选项是否已存在,不存在则添加
        if new_state not in current_states:
            # 注意:selection是元组,需要转成列表修改后再转回元组
            updated_states = list(current_states)
            updated_states.append(new_state)
            self._fields['state'].selection = tuple(updated_states)
            _logger.debug('Successfully extended mrp.production state with: other_state')

为什么原代码报错?

  1. _columns属性已被移除:Odoo 11全面使用新ORM API,旧API的_columns属性不再存在,新API中字段定义存储在_fields属性中。
  2. 重写__init__不适合新API:新API中模型的初始化逻辑已经重构,__init__方法不再是修改字段定义的合适时机,_setup_fields才是处理字段初始化扩展的正确钩子。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:00:37