有时我们的OpenERP用户希望对核心OpenERP模块中的字段进行小的更改。例如,他们希望产品屏幕的Rack,Row和Case字段长度超过16个字符。
我可以在不更改声明它的模块的情况下更改现有字段吗?我宁愿使用我们自己的自定义模块进行更改,而不是编辑product
模块本身。
答案 0 :(得分:4)
我有这个工作,但我希望其他人知道更清洁的方式。
您可以在自定义模块中继承核心模块的类,然后只声明一个与您要更改的字段同名的新字段。基本上,只需从核心模块复制字段声明,将其粘贴到自定义模块中,然后进行所需的更改。例如,我们的product_notes
模块widened the Rack, Row, and Case fields从the 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>)
}
简单来说,您只需覆盖该字段并应用它将反映的属性更改。