6

有时,我们的 OpenERP 用户想要对核心 OpenERP 模块中的某个字段进行小改动。例如,他们希望产品屏幕的 Rack、Row 和 Case 字段长度超过 16 个字符。

我可以更改现有字段而不更改声明它的模块吗?我宁愿使用我们自己的自定义模块进行更改,而不是编辑product模块本身。

4

3 回答 3

4

我已经完成了这项工作,但我希望其他人知道更清洁的方法。

您可以在自定义模块中继承核心模块的类,然后只需声明一个与您要更改的名称相同的新字段。本质上,只需从核心模块复制字段声明,将其粘贴到您的自定义模块中,然后进行所需的更改。例如,我们的product_notes模块将 Rack、Row 和 Case 字段从模块的 16 个扩大product255个。

_columns = {'loc_rack': fields.char('Rack', size=255),
            'loc_row': fields.char('Row', size=255),
            'loc_case': fields.char('Case', size=255)}

我不喜欢这样的原因是您现在对该字段的所有其他属性都有重复。如果您更改了字段长度,然后核心模块更改了帮助文本,您仍将拥有旧的帮助文本。我希望在加载模块时可以通过某种方式进入并调整父级的字段属性,但是我在正确的时间找不到任何挂钩。

您可以更轻松地进行的一项更改是字段的默认值。只需在自定义模块中为核心模块的字段声明一个默认值,它将替换原始默认值。例如,我们更改了模块中的默认默认sale_delayproduce_delayproduct

_defaults = {'sale_delay': lambda *a: 5,
             'produce_delay': lambda *a: 0}
于 2012-08-01T18:33:29.853 回答
1

在 ODOO 中,我们可以使用 xml 更改字段的任何属性。

            <field name="loc_rack" position="attributes">
                <attribute name="string">Axis</attribute>
            </field>

但是在某些情况下,例如扩展字段的大小失败了。

于 2014-08-20T09:45:44.963 回答
0

您需要继承产品形式。

干得好。

from openerp.osv import fields, osv
class product_product(osv.Model)  # <<<v7 

    _inherit = 'product.product'

    _columns = {
    'loc_rack': fields.char('Rack', size=<your size>),
    'loc_row': fields.char('Row', size=<your size>),
    'loc_case': fields.char('Case', size=<your size>)
    }

简而言之,您只需要覆盖该字段并应用您将反映的属性更改。

于 2014-08-28T12:04:03.420 回答