字段之间的关系 - 类OpenErp

时间:2013-05-16 01:41:04

标签: python postgresql openerp relation

我需要将product.py上首次声明的字段与我正在制作的自定义模块相关联。

字段位于product.product类中,如下所示:

_name = "product.product"
_description = "Product"
_table = "product_product"
_inherits = {'product.template': 'product_tmpl_id'}
_inherit = ['mail.thread']
_order = 'default_code,name_template'
_columns = {
    'codigo_n' : fields.char('Codigo Arancelario', size=64),
    'tec_esp' : fields.char('Especificaciones tecnicas', size=72),
    'qty_available': fields.function(_product_qty_available, type='float', string='Quantity On Hand'),
    'virtual_available': fields.function(_product_virtual_available, type='float', string='Quantity Available'),
    'incoming_qty': fields.function(_product_incoming_qty, type='float', string='Incoming'),
    'outgoing_qty': fields.function(_product_outgoing_qty, type='float', string='Outgoing'),
    'price': fields.function(_product_price, type='float', string='Price', digits_compute=dp.get_precision('Product Price')),
    'lst_price' : fields.function(_product_lst_price, type='float', string='Public Price', digits_compute=dp.get_precision('Product Price')),
    'code': fields.function(_product_code, type='char', string='Internal Reference'),
    'partner_ref' : fields.function(_product_partner_ref, type='char', string='Customer ref'),

这不是所有的product.py代码顺便说一句,但它显示了我需要关联的两个字段,即前两个codigo_ntec_esp,我在我的自定义中继承了该类模块如下:

_name = 'certificados.line'
_description = "Items del Certificado"
_inherit = 'product.product'

def multi_a_b(self, cr, uid, ids, name, arg, context=None):
    res = {}
    for record in self.browse(cr, uid, ids,context):
        res[record.id] = record.Cantidad * record.Precio_Unitario_Declarado
    return res

_columns = {
    'codigo_n' : fields.char( 'Codigo Arancelario'),
    'product_id' : fields.many2one('product.product', 'Material'),
    'Descripcion_Arancelaria' : fields.many2one('product.category','Descripcion Arancelaria', required=True, change_default=True, domain="[('type','=','normal')]"), 
    'tec_esp' : fields.char('Especificaciones tecnicas'),
    'Cantidad' : fields.float('Cantidad'), 'Unidad_de_Medida': fields.many2one('product.uom', 'Unidad de Medida'),
    'Precio_Unitario_Declarado' : fields.float('Precio Unitario Declarado'), 'Moneda' : fields.many2one('res.currency', 'Moneda'),
    'Valor_En_Divisas' : fields.function(multi_a_b, type='integer', string='Valor En Divisas'),
    'requisicion_id' : fields.many2one('certificados.certificados', 'Certificados de No Produccion', ondelete='cascade'),
    'Cantidad_Consumida' : fields.float('Cantidad Consumida'), 'Cantidad_Disponible' : fields.float('Cantidad Disponible'),
}

据我所知,如果我继承了_name原始对象,我应该继承它的所有字段,然后添加在新类上声明的新字段。

问题是,我不确定如何继承这两个char类型的字段,已经尝试one2many然后在自定义模块中通过many2one调用它们但是它返回None关系,我怎么能实现这个?

2 个答案:

答案 0 :(得分:2)

我已经可以在certificados.line对象中看到product.product是many2one,因此您可以通过product_id.tec_esp和product_id.codigo_n将它用于certificados.line对象。

如果要在certificados.line对象中显示这些字段codigo_n和tec_esp,则可以使用fields.related字段,其值与product.product中的值相同。

在certificados.line对象中定义tec_esp,如下所示:

'tec_esp': fields.related('product_id', 'tec_esp', type='char', size=64, string='Especificaciones tecnicas', store=True, readonly=True)

以相同的方式定义codigo_n。

当您使用product中定义的任何值保存certificados.line的记录时,

fields.related正在运行。只要您保存,这两个字段将自动填充该链接产品中定义的值。

答案 1 :(得分:0)

解决!

问题是_inherit = 'product.product'它试图覆盖product.py文件中的原始产品和字段。我删除了它,现在它可以工作了!

所以,你的解决方案很棒,就像魅力一样,非常感谢Priyesh Solanki!