0

我需要将首先声明的字段与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关系,我怎么能做到这一点?

4

2 回答 2

2

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

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

在 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 定义相同的方式。

当您使用产品中定义的任何值保存 certificados.line 的记录时,fields.related 正在工作。保存后,这两个字段将自动填充该链接产品中定义的值。

于 2013-05-16T06:10:00.900 回答
0

解决了!

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

所以,你的解决方案很棒,而且很有魅力,非常非常感谢 Priyesh Solanki!

于 2013-05-17T04:24:15.103 回答