我需要将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_n
和tec_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
关系,我怎么能实现这个?
答案 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!