使用自定义模块修改OpenERP的核心字段之一

时间:2012-08-01 18:33:30

标签: openerp odoo

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

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

3 个答案:

答案 0 :(得分:4)

我有这个工作,但我希望其他人知道更清洁的方式。

您可以在自定义模块中继承核心模块的类,然后只声明一个与您要更改的字段同名的新字段。基本上,只需从核心模块复制字段声明,将其粘贴到自定义模块中,然后进行所需的更改。例如,我们的product_notes模块widened the Rack, Row, and Case fieldsthe product module's 16到255。

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

我不喜欢这个的原因是你现在有了该字段的所有其他属性的重复。如果更改字段长度,然后核心模块更改了帮助文本,您仍将使用旧的帮助文本。我希望在加载模块时可以采用某种方式进入并调整父级的字段属性,但是我找不到合适的挂钩。

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

_defaults = {'sale_delay': lambda *a: 5,
             'produce_delay': lambda *a: 0}

答案 1 :(得分:1)

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

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

但有些情况如扩展字段的大小则失败。

答案 2 :(得分: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>)
    }

简单来说,您只需覆盖该字段并应用它将反映的属性更改。