Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从其他多个字段填写多个字段_Python_Postgresql_Onchange_Odoo - Fatal编程技术网

Python 从其他多个字段填写多个字段

Python 从其他多个字段填写多个字段,python,postgresql,onchange,odoo,Python,Postgresql,Onchange,Odoo,在product.template模型中,我有一个one2many fieldattribute_line_ID,它引用了以下类: class product_attribute_line(osv.osv): _name = "product.attribute.line" _rec_name = 'attribute_id' _columns = { 'product_tmpl_id': fields.many2one('product.template', 'Product Temp

在product.template模型中,我有一个one2many fieldattribute_line_ID,它引用了以下类:

class product_attribute_line(osv.osv):
_name = "product.attribute.line"
_rec_name = 'attribute_id'
_columns = {
    'product_tmpl_id': fields.many2one('product.template', 'Product Template', required=True, ondelete='cascade'),
    'attribute_id': fields.many2one('product.attribute', 'Attribute', required=True, ondelete='restrict'),
    'value_ids': fields.many2many('product.attribute.value', id1='line_id', id2='val_id', string='Product Attribute Value'),
}
另一方面,在product.template中创建了一个manyOne字段,该字段引用了一个新的modelcomun.denominador:

'cm_id' : fields.many2one('comun.denominador','Comun denominador', select=True, ondelete='cascade')
class product_attribute_line(osv.osv):
_name = "attribute.comun.denominador.line"
_rec_name = 'attribute_comun_denominador_id'
_columns = {
    'comun_denominador_id': fields.many2one('comun.denominador', 'Comun denominador', required=True, ondelete='cascade'),
    'attribute_comun_denominador_id': fields.many2one('product.attribute', 'Attribute', required=True, ondelete='restrict', readonly=True),
    'value_comun_denominador_ids': fields.many2many('product.attribute.value', id1='line_id', id2='val_id', string='Product Attribute Value'),
}

class comun_denominador(osv.osv):
_name='comun.denominador'
_rec_name='comun_denominador'
_columns = {
    'comun_denominador': fields.char('Común denominador', size=10),
    'code': fields.char('Código clasificación', size=10),
    'attribute_line_comun_denominador_ids' : fields.one2many('attribute.comun.denominador.line', 'comun_denominador_id', 'Atributos del comun denominador')             
    }
因此,当我选择“cm_id”时,它通过on_change函数将记录从comun.denominador带到product.template

这是我的onchange_函数:

def on_change_cm_id(self,cr, uid, ids,cm_id,context=None):
    context=context or {}
    attributes_product_template = []
    value = {}
    if ids:
        old_note_ids = self.pool.get('product.attribute.line').search(cr, uid,[('product_tmpl_id','in',ids)])
        self.pool.get('product.attribute.line').unlink(cr, uid, old_note_ids)
    attribute_cm_ids = []
    attribute_cm_ids = self.pool.get('attribute.comun.denominador.line').search(cr, uid, [('comun_denominador_id', '=', cm_id)])
    for attribute_id in self.pool.get('attribute.comun.denominador.line').read(cr, uid, attribute_cm_ids, ['attribute_comun_denominador_id', 'value_comun_denominador_ids']):
        attributes_product_template.append((0,0,{'value_ids':attribute_id['value_comun_denominador_ids'][0],'attribute_id':attribute_id['attribute_comun_denominador_id'][0]}))
    value.update(attribute_line_ids=attributes_product_template)
    return {'value':value}
这些模型将信息存储在comun.denominador中:

'cm_id' : fields.many2one('comun.denominador','Comun denominador', select=True, ondelete='cascade')
class product_attribute_line(osv.osv):
_name = "attribute.comun.denominador.line"
_rec_name = 'attribute_comun_denominador_id'
_columns = {
    'comun_denominador_id': fields.many2one('comun.denominador', 'Comun denominador', required=True, ondelete='cascade'),
    'attribute_comun_denominador_id': fields.many2one('product.attribute', 'Attribute', required=True, ondelete='restrict', readonly=True),
    'value_comun_denominador_ids': fields.many2many('product.attribute.value', id1='line_id', id2='val_id', string='Product Attribute Value'),
}

class comun_denominador(osv.osv):
_name='comun.denominador'
_rec_name='comun_denominador'
_columns = {
    'comun_denominador': fields.char('Común denominador', size=10),
    'code': fields.char('Código clasificación', size=10),
    'attribute_line_comun_denominador_ids' : fields.one2many('attribute.comun.denominador.line', 'comun_denominador_id', 'Atributos del comun denominador')             
    }
正如您在我的onchange_函数中看到的,我要做的就是填充字段 “属性_id” 和 “值\u id” 来自'product.attribute.line'模型,其值为'attribute\u comun\u denominador\u id'和'value\u comun\u denominador\u id'属于'attribute.comun.denominador.line'模型

Onchange函数适用于多个字段,其中有一个“attribute\u-comun\u-denominador\u-id”->“attribute\u-id”,但在多个字段“value\u-comun\u-denominador\u-id”->“value\u-id”的情况下,我得到以下错误:

File "/home/odoo/openerp/fields.py", line 1568, in convert_to_cache
    raise ValueError("Wrong value for %s: %s" % (self, value))
    ValueError: Wrong value for product.attribute.line.value_ids: 1
有人知道如何在多个字段之间正确迁移吗

def on_change_cm_id(self,cr, uid, ids,cm_id,context=None):
    context=context or {}
    attributes_product_template = []
    value = {}
    if ids:
        old_note_ids = self.pool.get('product.attribute.line').search(cr, uid,[('product_tmpl_id','in',ids)])
        self.pool.get('product.attribute.line').unlink(cr, uid, old_note_ids)
    attribute_cm_ids = []
    attribute_cm_ids = self.pool.get('attribute.comun.denominador.line').search(cr, uid, [('comun_denominador_id', '=', cm_id)])
    for attribute_id in self.pool.get('attribute.comun.denominador.line').read(cr, uid, attribute_cm_ids, ['attribute_comun_denominador_id', 'value_comun_denominador_ids']):
        attributes_product_template.append((0,0,{'value_ids':[(6,0,[attribute_id['value_comun_denominador_ids'][0]])],'attribute_id':attribute_id['attribute_comun_denominador_id'][0]}))
    value.update(attribute_line_ids=attributes_product_template)
    return {'value':value}