odoo:写入函数保存旧数据

时间:2016-09-17 10:59:18

标签: python openerp edit v8

我创建了一个onchange函数,它将一些对象行链接到当前的

mo_lines_g1 = fields.One2many(comodel_name='object.order', inverse_name='mo_id1', copy=False )

@api.onchange('date')
def change_date(self):  
    if self.date:
        g1=self.env['object.order'].search(['&'('date_order','>=',self.date),('date_order','<=',self.date)])
        self.mo_lines_g1 = [(6,0, g1.ids )]

这里一切正常,但是当我保存视图时,Odoo尝试删除object.order中的链接行
所以我试着看看写的函数发送了什么我发现它发送了旧的记录:
 vals[ 'mo_lines_g1'] = [[2, 61, False], [2, 62, False], [2, 63, False]]
通常必须是:vals['mo_lines_g1']=[] # or [(6,0,[])]
任何想法?

3 个答案:

答案 0 :(得分:0)

关于写入相关字段ORM Documentation的文档说明了(2,_,ids)作为一种无法在创建中使用的方法。如果您正在写作,您可以执行以下操作。

如果覆盖write()函数,你可能会进行一些登录以及(取决于Odoo行为的原因)强制记录以你希望的方式编写。

@api.multi
def write(self, vals):
    _logger = logging.getLogger(__name__)
    _logger.info("PREPARING TO WRITE RECORD")
    _logger.info("WRITING VALS: " + str(vals))
    return super(Schedule, self).write(vals)

答案 1 :(得分:0)

(6, _, ids)不能与One2many字段一起使用。

x2many values filling描述了它。

答案 2 :(得分:0)

我认为v8上存在一个错误,它不能自动工作 我在功能

上用(2,id,_)替换了val中的(3,id,_)

@api.multi
def write(self, vals): 
    if vals.has_key('mo_lines_g1'):
        g1=[]
        for line in vals['mo_lines_g1']:
            if line[0] == 2:
                line[0]=3  
            g1.append(line)
     return super(object_order, self).write( vals)